/[mailutils]/mailutils/MySql/MySql.c
ViewVC logotype

Diff of /mailutils/MySql/MySql.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.4 by gray, Tue Feb 5 15:03:19 2002 UTC revision 1.5 by gray, Tue Feb 19 17:02:35 2002 UTC
# Line 18  Line 18 
18  extern void *xmalloc (size_t);  extern void *xmalloc (size_t);
19    
20  static char *  static char *
21  sql_expand_query (const char *query, const char *username)  sql_expand_query (const char *query, const char *ustr)
22  {  {
23    char *p, *q, *res;    char *p, *q, *res;
24    int len;    int len;
# Line 33  sql_expand_query (const char *query, con Line 33  sql_expand_query (const char *query, con
33          {          {
34            if (p[1] == 'u')            if (p[1] == 'u')
35              {              {
36                len += strlen (username);                len += strlen (ustr);
37                p += 2;                p += 2;
38              }              }
39            else if (p[1] == '%')            else if (p[1] == '%')
# Line 65  sql_expand_query (const char *query, con Line 65  sql_expand_query (const char *query, con
65            switch (*++p)            switch (*++p)
66              {              {
67              case 'u':              case 'u':
68                strcpy (q, username);                strcpy (q, ustr);
69                q += strlen (q);                q += strlen (q);
70                p++;                p++;
71                break;                break;
# Line 147  getMpwnam (const char *username) Line 147  getMpwnam (const char *username)
147        
148    if (!tpw)    if (!tpw)
149      tpw = (struct passwd *)xmalloc (sizeof (struct passwd));      tpw = (struct passwd *)xmalloc (sizeof (struct passwd));
150    tpw->pw_name = xmalloc (strlen (username)+1);    tpw->pw_name = xmalloc (strlen (row[0])+1);
151    strcpy (tpw->pw_name, username);    strcpy (tpw->pw_name, row[0]);
152    
153    tpw->pw_passwd = xmalloc (strlen (row[0])+1);    tpw->pw_passwd = xmalloc (strlen (row[1])+1);
154      strcpy (tpw->pw_passwd, row[1]);
155    
156      tpw->pw_uid = atoi (row[2]);
157      tpw->pw_gid = atoi (row[3]);
158            
159      tpw->pw_gecos = xmalloc (strlen ("Mysql User")+1);
160      strcpy (tpw->pw_gecos, "Mysql User");
161    
162      tpw->pw_dir = xmalloc (strlen (row[4])+1);
163      strcpy (tpw->pw_dir, row[4]);
164    
165      tpw->pw_shell = xmalloc (strlen (row[5])+1);
166      strcpy (tpw->pw_shell, row[5]);
167            
168      mysql_free_result (res);
169      mysql_close (m);
170      return tpw;
171    }
172    
173    struct passwd *
174    getMpwuid (uid_t uid)
175    {
176      char *QueryStr = NULL;
177      MYSQL *m;
178      MYSQL_RES *res;
179      MYSQL_ROW row;
180      static struct passwd *tpw;
181      char uidstr[64];
182      
183      if (tpw)
184        {
185          free (tpw->pw_name);
186          free (tpw->pw_passwd);
187          free (tpw->pw_gecos);
188          free (tpw->pw_dir);
189          free (tpw->pw_shell);
190        }
191          
192      m = mysql_init (0);
193    
194      if (!m)
195        return NULL;
196    
197      if (!mysql_real_connect (m, sql_host, sql_user, sql_passwd, sql_db, sql_port,
198                               sql_socket, MFLAGS))
199        {
200          mu_error ("MySQL: connect failed: %s", mysql_error (m));
201          mysql_close (m);
202          return NULL;
203        }
204    
205      snprintf (uidstr, sizeof (uidstr), "%u", uid);
206      QueryStr = sql_expand_query (sql_getpwuid_query, uidstr);
207    
208      if (!QueryStr)
209        {
210          mysql_close (m);
211          return NULL;
212        }
213      
214      if (mysql_query (m, QueryStr) != 0)
215        {
216          mu_error ("MySQL: query failed: %s", mysql_error (m));
217          mysql_close (m);
218          return NULL;
219        }
220    
221      if ((res = mysql_store_result (m)) == NULL)
222        {
223          mu_error ("MySQL: can't store result: %s", mysql_error (m));
224          mysql_close (m);
225          return NULL;
226        }
227      
228      if ((row = mysql_fetch_row (res)) == NULL)
229        {
230          mu_error ("MySQL: can't fetch row: %s", mysql_error (m));
231          mysql_close (m);
232          return NULL;
233        }
234      
235      if (!tpw)
236        tpw = (struct passwd *)xmalloc (sizeof (struct passwd));
237      tpw->pw_name = xmalloc (strlen (row[0]+1));
238      strcpy (tpw->pw_name, row[0]);
239    
240      tpw->pw_passwd = xmalloc (strlen (row[1])+1);
241    strcpy (tpw->pw_passwd, row[0]);    strcpy (tpw->pw_passwd, row[0]);
242    
243    tpw->pw_uid = atoi (row[1]);    tpw->pw_uid = atoi (row[2]);
244    tpw->pw_gid = atoi (row[2]);    tpw->pw_gid = atoi (row[3]);
245                    
246    tpw->pw_gecos = xmalloc (strlen ("Mysql User")+1);    tpw->pw_gecos = xmalloc (strlen ("Mysql User")+1);
247    strcpy (tpw->pw_gecos, "Mysql User");    strcpy (tpw->pw_gecos, "Mysql User");
248    
249    tpw->pw_dir = xmalloc (strlen (row[3])+1);    tpw->pw_dir = xmalloc (strlen (row[4])+1);
250    strcpy (tpw->pw_dir, row[3]);    strcpy (tpw->pw_dir, row[4]);
251    
252    tpw->pw_shell = xmalloc (strlen (row[4])+1);    tpw->pw_shell = xmalloc (strlen (row[5])+1);
253    strcpy (tpw->pw_shell, row[4]);    strcpy (tpw->pw_shell, row[5]);
254                    
255    mysql_free_result (res);    mysql_free_result (res);
256    mysql_close (m);    mysql_close (m);

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.5

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26