]> git.ipfire.org Git - thirdparty/sarg.git/blobdiff - auth.c
Generate redirector log even if -d is not given
[thirdparty/sarg.git] / auth.c
diff --git a/auth.c b/auth.c
index 80c5266407fbaf5f8b085cc6097596199b641dc2..2c0ee326e65d82dba0ab9524f6c293ecdf92a4ec 100644 (file)
--- a/auth.c
+++ b/auth.c
@@ -1,10 +1,11 @@
 /*
- * AUTHOR: Pedro Lineu Orso                         pedro.orso@gmail.com
- *                                                            1998, 2009
  * SARG Squid Analysis Report Generator      http://sarg.sourceforge.net
+ *                                                            1998, 2015
  *
  * SARG donations:
  *      please look at http://sarg.sourceforge.net/donations.php
+ * Support:
+ *     http://sourceforge.net/projects/sarg/forums/forum/363374
  * ---------------------------------------------------------------------
  *
  *  This program is free software; you can redistribute it and/or modify
 #include "include/conf.h"
 #include "include/defs.h"
 
-void htaccess(const char *name)
+void htaccess(const struct userinfostruct *uinfo)
 {
-   char htname[MAXLEN];
-   FILE *fp_auth;
+       char htname[MAXLEN];
+       char line[MAXLEN];
+       FILE *fp_in;
+       FILE *fp_auth;
+       size_t i,nread;
 
-   if(strncmp(UserAuthentication,"yes",3) !=0 )
-      return;
+       if(!UserAuthentication)
+               return;
 
-   sprintf(htname,"%s/%s/.htaccess",dirname,name);
-   if((fp_auth=fopen(htname,"w"))==NULL) {
-      fprintf(stderr, "SARG: (auth) %s: %s\n",text[45],htname);
-      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);
+       }
 
-   strcpy(warea,Require);
-   if (getword(buf,sizeof(buf),warea,'%')<0) {
-      printf("SARG: The \"Require\" entry of your sarg.conf file is too long for your %s file.\n",htname);
-      exit(1);
-   }
-   fputs("AuthUserFile ",fp_auth);
-   fputs(AuthUserFile,fp_auth);
-   fputs("\n",fp_auth);
-   fputs("AuthName ",fp_auth);
-   if(strstr(AuthName,"\"") == 0)
-      fputs("\"",fp_auth);
-   fputs(AuthName,fp_auth);
-   if(strstr(AuthName,"\"") == 0)
-      fputs("\"",fp_auth);
-   fputs("\n",fp_auth);
-   fputs("AuthType ",fp_auth);
-   fputs(AuthType,fp_auth);
-   fputs("\n<Limit GET POST>\n",fp_auth);
-   fputs(buf,fp_auth);
-   fputs(name,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;
 }