/*
* 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;
}