Changeset 299

Show
Ignore:
Timestamp:
11/16/99 10:43:09 (14 years ago)
Author:
ucacoxh
Message:

- Added check for HOME environment variable before doing getpwuid. Order is now

MBUS, HOME, getpwuid.

- Check if location ends in filename of mbus config file, if not append. MBUS

can now point to directory or file as a consequence.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • common/trunk/src/mbus_config.c

    r295 r299  
    4848#define MBUS_ENCRKEY_LEN      8 
    4949#define MBUS_HASHKEY_LEN     12 
    50 #define MBUS_BUF_SIZE     1500 
     50#define MBUS_BUF_SIZE      1500 
     51#define MBUS_FILE_NAME   ".mbus" 
     52#define MBUS_FILE_NAME_LEN    5 
    5153 
    5254char *mbus_new_encrkey(void) 
     
    168170        struct flock     l; 
    169171        struct stat      s; 
    170         struct passwd   *p;      
    171172        char            *buf; 
    172173        char            *cfg_file; 
    173  
    174         /* The getpwuid() stuff is to determine the users home directory, into which we */ 
    175         /* write a .mbus config file. The struct returned by getpwuid() is statically   */ 
    176         /* allocated, so it's not necessary to free it afterwards.                      */ 
    177         p = getpwuid(getuid()); 
    178         if (p == NULL) { 
    179                 perror("Unable to get passwd entry"); 
    180                 abort(); 
    181         } 
    182         if (getenv("MBUS")==NULL) { 
    183                 cfg_file = (char *) xmalloc(strlen(p->pw_dir) + 7); 
    184                 sprintf(cfg_file, "%s/.mbus", p->pw_dir);        
     174        char            *cfg_loc; 
     175        int              cfg_loc_len; 
     176 
     177        cfg_loc = getenv("MBUS"); 
     178        if (cfg_loc == NULL) { 
     179                cfg_loc = getenv("HOME"); 
     180                if (cfg_loc == NULL) { 
     181                        /* The getpwuid() stuff is to determine the users    */ 
     182                        /* home directory, into which we write a .mbus       */ 
     183                        /* config file. The struct returned by getpwuid() is */ 
     184                        /* statically allocated, so it's not necessary to    */ 
     185                        /* free it afterwards.                               */ 
     186                        struct passwd   *p;      
     187                        p = getpwuid(getuid()); 
     188                        if (p == NULL) { 
     189                                perror("Unable to get passwd entry"); 
     190                                abort();               
     191                        } 
     192                        cfg_loc = p->pw_dir; 
     193                } 
     194        } 
     195 
     196        /* Check if config_loc is terminated by mbus config file name. If    */ 
     197        /* it's not add it.  This is allows environment variable MBUS to     */ 
     198        /* point to config file of directory of config file.                 */ 
     199        cfg_loc_len = strlen(cfg_loc); 
     200        if (cfg_loc_len < MBUS_FILE_NAME_LEN || 
     201            strcmp(cfg_loc + cfg_loc_len - MBUS_FILE_NAME_LEN, MBUS_FILE_NAME)){ 
     202                /* File location does not include config file name.          */ 
     203                cfg_file = (char*)xmalloc(cfg_loc_len + MBUS_FILE_NAME_LEN + 2); 
     204                sprintf(cfg_file, "%s/%s", cfg_loc, MBUS_FILE_NAME);     
    185205        } else { 
    186                 cfg_file = (char *) xmalloc(strlen(getenv("MBUS")) + 1); 
    187                 sprintf(cfg_file, "%s", getenv("MBUS")); 
    188         } 
     206                cfg_file = xstrdup(cfg_loc); 
     207        } 
     208         
    189209        m->cfgfd = open(cfg_file, O_RDWR | O_CREAT, 0600); 
    190210        if (m->cfgfd == -1) {