/[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.3 by gray, Wed Sep 5 09:15:17 2001 UTC revision 1.4 by gray, Tue Feb 5 15:03:19 2002 UTC
# Line 17  Line 17 
17    
18  extern void *xmalloc (size_t);  extern void *xmalloc (size_t);
19    
20    static char *
21    sql_expand_query (const char *query, const char *username)
22    {
23      char *p, *q, *res;
24      int len;
25    
26      if (!query)
27        return NULL;
28      
29      /* Compute resulting query length */
30      for (len = 0, p = query; *p; )
31        {
32          if (*p == '%')
33            {
34              if (p[1] == 'u')
35                {
36                  len += strlen (username);
37                  p += 2;
38                }
39              else if (p[1] == '%')
40                {
41                  len++;
42                  p += 2;
43                }
44              else
45                {
46                  len++;
47                  p++;
48                }
49            }
50          else
51            {
52              len++;
53              p++;
54            }
55        }
56    
57      res = malloc (len + 1);
58      if (!res)
59        return res;
60    
61      for (p = query, q = res; *p; )
62        {
63          if (*p == '%')
64            {
65              switch (*++p)
66                {
67                case 'u':
68                  strcpy (q, username);
69                  q += strlen (q);
70                  p++;
71                  break;
72                  
73                case '%':
74                  *q++ = *p++;
75                  break;
76                  
77                default:
78                  *q++ = *p++;
79                }
80            }
81          else
82            *q++ = *p++;
83        }
84      *q = 0;
85      return res;
86    }
87    
88  struct passwd *  struct passwd *
89  getMpwnam (const char *username)  getMpwnam (const char *username)
90  {  {
# Line 40  getMpwnam (const char *username) Line 108  getMpwnam (const char *username)
108    if (!m)    if (!m)
109      return NULL;      return NULL;
110    
111    if (!mysql_real_connect (m, MHOST, MUSER, MPASS, MDB, MPORT,    if (!mysql_real_connect (m, sql_host, sql_user, sql_passwd, sql_db, sql_port,
112                             MSOCKET, MFLAGS))                             sql_socket, MFLAGS))
113      {      {
114        mu_error ("MySQL: connect failed: %s", mysql_error (m));        mu_error ("MySQL: connect failed: %s", mysql_error (m));
115        mysql_close (m);        mysql_close (m);
116        return NULL;        return NULL;
117      }      }
118      
119    asprintf (&QueryStr,    QueryStr = sql_expand_query (sql_getpwnam_query, username);
            "select %s,%s,%s,%s,%s from %s where %s = '%s'",  
            Mpassword, Muid, Mgid, Mhomedir, Mshell, Mtable,  
            Musername, username);  
120    
121    if (!QueryStr)    if (!QueryStr)
122      {      {
# Line 127  getMspnam (const char *username) Line 192  getMspnam (const char *username)
192    if (!m)    if (!m)
193      return NULL;      return NULL;
194        
195    if (!mysql_real_connect (m, MHOST, MUSER, MPASS, MDB, MPORT,    if (!mysql_real_connect (m, sql_host, sql_user, sql_passwd, sql_db, sql_port,
196                             MSOCKET, MFLAGS))                             sql_socket, MFLAGS))
197      {      {
198        mu_error ("MySQL: connect failed: %s", mysql_error (m));        mu_error ("MySQL: connect failed: %s", mysql_error (m));
199        mysql_close (m);        mysql_close (m);
200        return NULL;        return NULL;
201      }      }
202    
203    asprintf (&QueryStr,    QueryStr = sql_expand_query (sql_getpass_query, username);
204              "select %s from %s where %s = '%s'",  
205              Mpassword, Mtable, Musername, username);    if (!QueryStr)
206        {
207          mysql_close (m);
208          return NULL;
209        }
210    
211    if (mysql_query (m, QueryStr) != 0)    if (mysql_query (m, QueryStr) != 0)
212      {      {

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

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