]> git.ipfire.org Git - thirdparty/sarg.git/blobdiff - userinfo.c
Remove trailing spaces in every source file
[thirdparty/sarg.git] / userinfo.c
index a217623f174633f59a3e75b211bb2ebbcc6ca5bc..9117a23614e6ae4f5b257742514049f1f7e5de0e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * SARG Squid Analysis Report Generator      http://sarg.sourceforge.net
- *                                                            1998, 2011
+ *                                                            1998, 2012
  *
  * SARG donations:
  *      please look at http://sarg.sourceforge.net/donations.php
@@ -56,6 +56,8 @@ struct userscanstruct
 
 //! The first group of users.
 static struct usergroupstruct *first_user_group=NULL;
+//! The counter to generate unique user number when ::AnonymousOutputFiles is set.
+static int AnonymousCounter=0;
 
 struct userinfostruct *userinfo_create(const char *userid)
 {
@@ -87,35 +89,39 @@ struct userinfostruct *userinfo_create(const char *userid)
        }
        user=group->list+group->nusers++;
 
-       strncpy(user->id,userid,MAX_USER_LEN-1);
-       user->id[MAX_USER_LEN-1]='\0';
-
-       skip=0;
-       j=0;
-       for (i=0 ; userid[i] && j<MAX_USER_FNAME_LEN-1 ; i++) {
-               if (isalnum(userid[i]) || userid[i]=='-' || userid[i]=='_') {
-                       user->filename[j++]=userid[i];
-                       skip=0;
-               } else {
-                       if (!skip) {
-                               user->filename[j++]='_';
-                               skip=1;
+       safe_strcpy(user->id,userid,sizeof(user->id));
+
+       if (AnonymousOutputFiles) {
+               snprintf(user->filename,sizeof(user->filename),"%d",AnonymousCounter++);
+       } else {
+               skip=0;
+               j=0;
+               for (i=0 ; userid[i] && j<MAX_USER_FNAME_LEN-1 ; i++) {
+                       if (isalnum(userid[i]) || userid[i]=='-' || userid[i]=='_') {
+                               user->filename[j++]=userid[i];
+                               skip=0;
+                       } else {
+                               if (!skip) {
+                                       user->filename[j++]='_';
+                                       skip=1;
+                               }
                        }
                }
-       }
-       user->filename[j]='\0';
-       flen=i;
-
-       count=0;
-       for (group=first_user_group ; group ; group=group->next) {
-               lastuser=(group->next) ? group->nusers : group->nusers-1;
-               for (i=0 ; i<lastuser ; i++) {
-                       if (strcasecmp(user->filename,group->list[i].filename)==0) {
-                               clen=sprintf(cstr,"-%04X",count++);
-                               if (flen+clen<MAX_USER_FNAME_LEN)
-                                       strcpy(user->filename+flen,cstr);
-                               else
-                                       strcpy(user->filename+MAX_USER_FNAME_LEN-clen,cstr);
+               if (j==0) user->filename[j++]='_'; //don't leave a file name empty
+               user->filename[j]='\0';
+               flen=i-1;
+
+               count=0;
+               for (group=first_user_group ; group ; group=group->next) {
+                       lastuser=(group->next) ? group->nusers : group->nusers-1;
+                       for (i=0 ; i<lastuser ; i++) {
+                               if (strcasecmp(user->filename,group->list[i].filename)==0) {
+                                       clen=sprintf(cstr,"-%04X",count++);
+                                       if (flen+clen<MAX_USER_FNAME_LEN)
+                                               strcpy(user->filename+flen,cstr);
+                                       else
+                                               strcpy(user->filename+MAX_USER_FNAME_LEN-clen,cstr);
+                               }
                        }
                }
        }
@@ -213,3 +219,18 @@ struct userinfostruct *userinfo_advancescan(userscan uscan)
        }
        return(uinfo);
 }
+
+/*!
+Clear the general purpose flag from all the user's info.
+*/
+void userinfo_clearflag(void)
+{
+       struct usergroupstruct *group;
+       int i;
+
+       for (group=first_user_group ; group ; group=group->next) {
+               for (i=0 ; i<group->nusers ; i++)
+                       group->list[i].flag=0;
+       }
+}
+