ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/user_stats.c
Revision: 1.14
Committed: Fri Jan 16 15:54:54 2004 UTC (20 years, 4 months ago) by tdb
Content type: text/plain
Branch: MAIN
Changes since 1.13: +13 -12 lines
Log Message:
Alter the licensing of libstatgrab. The library part is now under the
LGPL, whilst the tools/examples are under the GPL. Both licenses are
included in the distribution (and are both now in CVS). Also made a
minor alteration to the webpage where it said everything was licensed
under the GPL.

File Contents

# Content
1 /*
2 * i-scream central monitoring system
3 * http://www.i-scream.org
4 * Copyright (C) 2000-2004 i-scream
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 * 02111-1307 USA
20 */
21
22 #ifdef HAVE_CONFIG_H
23 #include "config.h"
24 #endif
25
26 #include <stdlib.h>
27 #include <stdio.h>
28 #include <string.h>
29 #include "statgrab.h"
30 #ifdef ALLBSD
31 #include <sys/types.h>
32 #endif
33 #include <utmp.h>
34
35 #ifdef SOLARIS
36 #define MAX_LOGIN_NAME_SIZE 8
37 #endif
38 #if defined(LINUX) || defined(FREEBSD)
39 #define MAX_LOGIN_NAME_SIZE UT_NAMESIZE
40 #endif
41 #ifdef NETBSD
42 #define MAX_LOGIN_NAME_SIZE _POSIX_LOGIN_NAME_MAX
43 #endif
44 #if defined(CYGWIN)
45 #define MAX_LOGIN_NAME_SIZE _SC_LOGIN_NAME_MAX
46 #endif
47
48 #define START_VAL (5*(1+MAX_LOGIN_NAME_SIZE))
49
50 user_stat_t *get_user_stats(){
51 int num_users=0;
52
53 static user_stat_t user_stats;
54 static int size_of_namelist=-1;
55 char *tmp;
56 #if defined(SOLARIS) || defined(LINUX) || defined(CYGWIN)
57 struct utmp *entry;
58 #endif
59 #ifdef ALLBSD
60 struct utmp entry;
61 FILE *f;
62 #endif
63
64 /* First case call */
65 if (size_of_namelist==-1){
66 user_stats.name_list=malloc(START_VAL);
67 if(user_stats.name_list==NULL){
68 return NULL;
69 }
70 size_of_namelist=START_VAL;
71 }
72
73 /* Essentially blank the list, or give it a inital starting string */
74 strcpy(user_stats.name_list, "");
75
76 #if defined(SOLARIS) || defined(LINUX) || defined(CYGWIN)
77 setutent();
78 while((entry=getutent()) != NULL) {
79 if(entry->ut_type==USER_PROCESS) {
80 if((strlen(user_stats.name_list)+MAX_LOGIN_NAME_SIZE+2) > size_of_namelist){
81 tmp=user_stats.name_list;
82 user_stats.name_list=realloc(user_stats.name_list, 1+(size_of_namelist*2));
83 if(user_stats.name_list==NULL){
84 user_stats.name_list=tmp;
85 return NULL;
86 }
87 size_of_namelist=1+(size_of_namelist*2);
88 }
89
90 strncat(user_stats.name_list, entry->ut_user, MAX_LOGIN_NAME_SIZE);
91 strcat(user_stats.name_list, " ");
92 num_users++;
93 }
94 }
95 endutent();
96 #endif
97 #ifdef ALLBSD
98 if ((f=fopen(_PATH_UTMP, "r")) == NULL){
99 return NULL;
100 }
101 while((fread(&entry, sizeof(entry),1,f)) != 0){
102 if (entry.ut_name[0] == '\0') continue;
103 if((strlen(user_stats.name_list)+MAX_LOGIN_NAME_SIZE+2) > size_of_namelist){
104 tmp=user_stats.name_list;
105 user_stats.name_list=realloc(user_stats.name_list, 1+(size_of_namelist*2));
106 if(user_stats.name_list==NULL){
107 user_stats.name_list=tmp;
108 return NULL;
109 }
110 size_of_namelist=1+(size_of_namelist*2);
111
112 }
113 strncat(user_stats.name_list, entry.ut_name, MAX_LOGIN_NAME_SIZE);
114 strcat(user_stats.name_list, " ");
115 num_users++;
116 }
117 fclose(f);
118
119 #endif
120 /* We want to remove the last " " */
121 if(num_users!=0){
122 tmp=strrchr(user_stats.name_list, ' ');
123 if(tmp!=NULL){
124 *tmp='\0';
125 user_stats.num_entries=num_users;
126 }
127 }
128
129 return &user_stats;
130
131 }