]> git.ipfire.org Git - thirdparty/sarg.git/blobdiff - auth.c
Rename configure.in as configure.ac
[thirdparty/sarg.git] / auth.c
diff --git a/auth.c b/auth.c
index 27fe4816be34c9fec0f74fd01a4b676ebc8f5f1b..2c0ee326e65d82dba0ab9524f6c293ecdf92a4ec 100644 (file)
--- a/auth.c
+++ b/auth.c
@@ -1,6 +1,6 @@
 /*
  * SARG Squid Analysis Report Generator      http://sarg.sourceforge.net
- *                                                            1998, 2010
+ *                                                            1998, 2015
  *
  * SARG donations:
  *      please look at http://sarg.sourceforge.net/donations.php
 
 void htaccess(const struct userinfostruct *uinfo)
 {
-   char htname[MAXLEN];
-   FILE *fp_auth;
-   int i;
+       char htname[MAXLEN];
+       char line[MAXLEN];
+       FILE *fp_in;
+       FILE *fp_auth;
+       size_t i,nread;
 
-   if(!UserAuthentication)
-      return;
+       if(!UserAuthentication)
+               return;
 
-   if (snprintf(htname,sizeof(htname),"%s/%s/.htaccess",dirname,uinfo->filename)>=sizeof(htname)) {
-      debuga(_("File name too long: %s/%s/.htaccess\n"),dirname,uinfo->filename);
-      exit(1);
-   }
-   if((fp_auth=fopen(htname,"w"))==NULL) {
-      fprintf(stderr, "SARG: (auth) %s: %s - %s\n",_("Cannot open file"),htname,strerror(errno));
-      exit(1);
-   }
+       if (snprintf(htname,sizeof(htname),"%s/%s/.htaccess",outdirname,uinfo->filename)>=sizeof(htname)) {
+               debuga(__FILE__,__LINE__,_("Path too long: "));
+               debuga_more("%s/%s/.htaccess\n",outdirname,uinfo->filename);
+               exit(EXIT_FAILURE);
+       }
+       if((fp_auth=fopen(htname,"w"))==NULL) {
+               debuga(__FILE__,__LINE__,_("Cannot open file \"%s\": %s\n"),htname,strerror(errno));
+               exit(EXIT_FAILURE);
+       }
 
-   fprintf(fp_auth,"AuthUserFile %s\n",AuthUserFile);
-   if(strchr(AuthName,'\"') == 0)
-      fprintf(fp_auth,"AuthName \"%s\"\n",AuthName);
-   else
-      fprintf(fp_auth,"AuthName %s\n",AuthName);
-   fprintf(fp_auth,"AuthType %s\n",AuthType);
-   fputs("<Limit GET POST>\nRequire ",fp_auth);
-   for (i=0 ; Require[i] ; i++)
-      if (Require[i]=='%' && Require[i+1]=='u') {
-         fputs(uinfo->id,fp_auth);
-         i++;
-      } else {
-         fputc(Require[i],fp_auth);
-   }
-   fputs("\n</LIMIT>\n",fp_auth);
+       if ((fp_in=fopen(AuthUserTemplateFile,"r"))==NULL) {
+               debuga(__FILE__,__LINE__,_("Cannot open file \"%s\": %s\n"),AuthUserTemplateFile,strerror(errno));
+               exit(EXIT_FAILURE);
+       }
 
-   fclose(fp_auth);
+       while((nread=fread(line,1,sizeof(line),fp_in))!=0) {
+               for (i=0 ; i<nread ; i++)
+                       if (line[i]=='%' && i+2<nread && line[i+1]=='u' && !isalpha(line[i+2])) {
+                               fputs(uinfo->id,fp_auth);
+                               i++;
+                       } else {
+                               fputc(line[i],fp_auth);
+                       }
+       }
+       if (fclose(fp_auth)==EOF) {
+               debuga(__FILE__,__LINE__,_("Write error in \"%s\": %s\n"),htname,strerror(errno));
+               exit(EXIT_FAILURE);
+       }
+       if (fclose(fp_in)==EOF) {
+               debuga(__FILE__,__LINE__,_("Read error in \"%s\": %s\n"),AuthUserTemplateFile,strerror(errno));
+               exit(EXIT_FAILURE);
+       }
 
-   return;
+       return;
 }