chiark / gitweb /
@@ -7,7 +7,7 @@
[userv.git] / parser.c
index ad0829d6911ce669384b0c908e4d4e7b5851f7e2..0d1054ff29ae454f92474e6711e711549a4ab0e6 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -179,7 +179,7 @@ static int dequote(char *inplace) {
         *q++= *p++; continue;
       } else {
        while (*p==' ' || *p=='\t') p++;
-       assert(*p=='\n');
+       v= *p++; assert(v=='\n');
       }
     }
   }
@@ -370,6 +370,7 @@ static int paa_message(const char **message_r) {
   /* Returned value is invalidated by repeated calls. */
   static char *buildbuf;
   static int buildbuflen;
+  const char *usetext;
 
   int r, tl;
 
@@ -384,9 +385,10 @@ static int paa_message(const char **message_r) {
       return tokv_error;
     }
     if (r == tokv_newline) break;
-    tl+= strlen(yytext);
+    usetext= r == tokv_lwsp ? " " : yytext;
+    tl+= strlen(usetext);
     if (makeroom(&buildbuf,&buildbuflen,tl)) return stringoverflow("message");
-    strcat(buildbuf,yytext);
+    strcat(buildbuf,usetext);
   }
   *message_r= buildbuf;
   return 0;
@@ -499,7 +501,7 @@ static int pf_service(int ptoken, char ***rvalues) {
 }
 
 static int pf_callinguser(int ptoken, char ***rvalues) {
-  return parm_usernameuid(rvalues,logname,request_mbuf.callinguid);
+  return parm_usernameuid(rvalues,loginname,request_mbuf.callinguid);
 }
 
 static int pf_serviceuser(int ptoken, char ***rvalues) {
@@ -1089,8 +1091,14 @@ int df_includelookup(int dtoken) {
       } else {
        if (*p=='.') *q++= ':';
        while ((c= *p++)) {
-         if (c=='/') { *q++= ':'; c='-'; }
-         else if (c==':') { *q++= ':'; }
+         if (c=='/') {
+           *q++= ':';
+           c= '-';
+         } else if (!((c >= '0' && c <= '9') ||
+                      (c >= 'a' && c <= 'z') ||
+                      c == '-' || c == '_')) {
+           *q++= ':';
+         }
          *q++= c;
        }
        *q++= 0;