/*
* SARG Squid Analysis Report Generator http://sarg.sourceforge.net
- * 1998, 2011
+ * 1998, 2012
*
* SARG donations:
* please look at http://sarg.sourceforge.net/donations.php
//! 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)
{
}
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);
+ }
}
}
}
}
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;
+ }
+}
+