[BACK]Return to cgi.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Diff for /mandoc/cgi.c between version 1.158 and 1.160

version 1.158, 2018/05/29 20:32:45 version 1.160, 2018/10/02 19:41:23
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2016, 2017 Ingo Schwarze <schwarze@usta.de>   * Copyright (c) 2014, 2015, 2016, 2017, 2018 Ingo Schwarze <schwarze@usta.de>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 69  enum focus {
Line 69  enum focus {
 static  void             html_print(const char *);  static  void             html_print(const char *);
 static  void             html_putchar(char);  static  void             html_putchar(char);
 static  int              http_decode(char *);  static  int              http_decode(char *);
   static  void             http_encode(const char *p);
 static  void             parse_manpath_conf(struct req *);  static  void             parse_manpath_conf(struct req *);
 static  void             parse_path_info(struct req *req, const char *path);  static  void             parse_path_info(struct req *req, const char *path);
 static  void             parse_query_string(struct req *, const char *);  static  void             parse_query_string(struct req *, const char *);
Line 90  static void   resp_format(const struct req *, const ch
Line 91  static void   resp_format(const struct req *, const ch
 static  void             resp_searchform(const struct req *, enum focus);  static  void             resp_searchform(const struct req *, enum focus);
 static  void             resp_show(const struct req *, const char *);  static  void             resp_show(const struct req *, const char *);
 static  void             set_query_attr(char **, char **);  static  void             set_query_attr(char **, char **);
   static  int              validate_arch(const char *);
 static  int              validate_filename(const char *);  static  int              validate_filename(const char *);
 static  int              validate_manpath(const struct req *, const char *);  static  int              validate_manpath(const struct req *, const char *);
 static  int              validate_urifrag(const char *);  static  int              validate_urifrag(const char *);
Line 316  http_decode(char *p)
Line 318  http_decode(char *p)
 }  }
   
 static void  static void
   http_encode(const char *p)
   {
           for (; *p != '\0'; p++) {
                   if (isalnum((unsigned char)*p) == 0 &&
                       strchr("-._~", *p) == NULL)
                           printf("%%%02.2X", (unsigned char)*p);
                   else
                           putchar(*p);
           }
   }
   
   static void
 resp_begin_http(int code, const char *msg)  resp_begin_http(int code, const char *msg)
 {  {
   
Line 490  validate_manpath(const struct req *req, const char* ma
Line 504  validate_manpath(const struct req *req, const char* ma
 }  }
   
 static int  static int
   validate_arch(const char *arch)
   {
           int      i;
   
           for (i = 0; i < arch_MAX; i++)
                   if (strcmp(arch, arch_names[i]) == 0)
                           return 1;
   
           return 0;
   }
   
   static int
 validate_filename(const char *file)  validate_filename(const char *file)
 {  {
   
Line 562  pg_redirect(const struct req *req, const char *name)
Line 588  pg_redirect(const struct req *req, const char *name)
                 printf("%s/", req->q.manpath);                  printf("%s/", req->q.manpath);
         if (req->q.arch != NULL)          if (req->q.arch != NULL)
                 printf("%s/", req->q.arch);                  printf("%s/", req->q.arch);
         printf("%s", name);          http_encode(name);
         if (req->q.sec != NULL)          if (req->q.sec != NULL) {
                 printf(".%s", req->q.sec);                  putchar('.');
                   http_encode(req->q.sec);
           }
         printf("\r\nContent-Type: text/html; charset=utf-8\r\n\r\n");          printf("\r\nContent-Type: text/html; charset=utf-8\r\n\r\n");
 }  }
   
Line 839  resp_format(const struct req *req, const char *file)
Line 867  resp_format(const struct req *req, const char *file)
         memset(&conf, 0, sizeof(conf));          memset(&conf, 0, sizeof(conf));
         conf.fragment = 1;          conf.fragment = 1;
         conf.style = mandoc_strdup(CSS_DIR "/mandoc.css");          conf.style = mandoc_strdup(CSS_DIR "/mandoc.css");
           conf.toc = 1;
         usepath = strcmp(req->q.manpath, req->p[0]);          usepath = strcmp(req->q.manpath, req->p[0]);
         mandoc_asprintf(&conf.man, "/%s%s%s%s%%N.%%S",          mandoc_asprintf(&conf.man, "/%s%s%s%s%%N.%%S",
             scriptname, *scriptname == '\0' ? "" : "/",              scriptname, *scriptname == '\0' ? "" : "/",
Line 1089  main(void)
Line 1118  main(void)
                 return EXIT_FAILURE;                  return EXIT_FAILURE;
         }          }
   
         if ( ! (NULL == req.q.arch || validate_urifrag(req.q.arch))) {          if (req.q.arch != NULL && validate_arch(req.q.arch) == 0) {
                 pg_error_badrequest(                  pg_error_badrequest(
                     "You specified an invalid architecture.");                      "You specified an invalid architecture.");
                 return EXIT_FAILURE;                  return EXIT_FAILURE;

Legend:
Removed from v.1.158  
changed lines
  Added in v.1.160

CVSweb