00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "rods.h"
00014
00015 #include "readServerConfig.h"
00016 #include "initServer.h"
00017
00018 #include <string>
00019 #include <algorithm>
00020
00021 #define BUF_LEN 500
00022
00023 char *
00024 getServerConfigDir()
00025 {
00026 char *myDir;
00027
00028 if ((myDir = (char *) getenv("irodsConfigDir")) != (char *) NULL) {
00029 return (myDir);
00030 }
00031 return (DEF_CONFIG_DIR);
00032 }
00033
00034 int
00035 readServerConfig(rodsServerConfig_t *rodsServerConfig) {
00036 FILE *fptr;
00037 char buf[BUF_LEN];
00038 char *fchar;
00039 int len;
00040 char *key;
00041 char *serverConfigFile;
00042
00043 serverConfigFile = (char *) malloc((strlen (getServerConfigDir()) +
00044 strlen(SERVER_CONFIG_FILE) + 24));
00045
00046 sprintf (serverConfigFile, "%s/%s", getServerConfigDir(),
00047 SERVER_CONFIG_FILE);
00048
00049 fptr = fopen (serverConfigFile, "r");
00050
00051 if (fptr == NULL) {
00052 rodsLog (LOG_NOTICE,
00053 "Cannot open SERVER_CONFIG_FILE file %s. errno = %d\n",
00054 serverConfigFile, errno);
00055 free (serverConfigFile);
00056 return (SYS_CONFIG_FILE_ERR);
00057 }
00058 free (serverConfigFile);
00059
00060 buf[BUF_LEN-1]='\0';
00061 fchar = fgets(buf, BUF_LEN-1, fptr);
00062 for(;fchar!='\0';) {
00063 if (buf[0]=='#' || buf[0]=='/') {
00064 buf[0]='\0';
00065 }
00066 key=strstr(buf, DB_PASSWORD_KW);
00067 if (key != NULL) {
00068 len = strlen(DB_PASSWORD_KW);
00069 rstrcpy(rodsServerConfig->DBPassword,
00070 findNextTokenAndTerm(key+len), MAX_PASSWORD_LEN);
00071 rodsLog(LOG_DEBUG1, "DBPassword=%s", rodsServerConfig->DBPassword);
00072 }
00073 key=strstr(buf, DB_KEY_KW);
00074 if (key != NULL) {
00075 len = strlen(DB_KEY_KW);
00076 rstrcpy(rodsServerConfig->DBKey,
00077 findNextTokenAndTerm(key+len), MAX_PASSWORD_LEN);
00078 rodsLog(LOG_DEBUG1, "DBKey=%s",
00079 rodsServerConfig->DBKey);
00080 }
00081 key=strstr(buf, DB_USERNAME_KW);
00082 if (key != NULL) {
00083 len = strlen(DB_USERNAME_KW);
00084 rstrcpy(rodsServerConfig->DBUsername,
00085 findNextTokenAndTerm(key+len), NAME_LEN);
00086 rodsLog(LOG_DEBUG1, "DBUsername=%s", rodsServerConfig->DBUsername);
00087 }
00088
00089
00090
00091 rodsServerConfig->eirods_pam_auth_no_extend = false;
00092 rodsServerConfig->eirods_pam_password_len = 20;
00093 strncpy(
00094 rodsServerConfig->eirods_pam_password_min_time,
00095 "121",
00096 NAME_LEN );
00097 strncpy(
00098 rodsServerConfig->eirods_pam_password_max_time,
00099 "1209600",
00100 NAME_LEN );
00101
00102 key = strstr( buf, PAM_PW_LEN_KW );
00103 if( key != NULL ) {
00104 len = strlen( PAM_PW_LEN_KW );
00105 char val[ NAME_LEN ];
00106 rstrcpy(
00107 val,
00108 findNextTokenAndTerm( key + len ),
00109 NAME_LEN );
00110 rodsServerConfig->eirods_pam_password_len = atoi( val );
00111 rodsLog(
00112 LOG_NOTICE,
00113 "%s=%s",
00114 PAM_PW_LEN_KW,
00115 val );
00116
00117 }
00118
00119 key = strstr( buf, PAM_NO_EXTEND_KW );
00120 if( key != NULL ) {
00121 len = strlen( PAM_NO_EXTEND_KW );
00122 char val[ NAME_LEN ];
00123 rstrcpy(
00124 val,
00125 findNextTokenAndTerm( key + len ),
00126 NAME_LEN );
00127
00128 std::string val_str = val;
00129 std::transform(
00130 val_str.begin(),
00131 val_str.end(),
00132 val_str.begin(),
00133 ::tolower );
00134 if( val_str == "true" ) {
00135 rodsServerConfig->eirods_pam_auth_no_extend = true;
00136 } else {
00137 rodsServerConfig->eirods_pam_auth_no_extend = false;
00138 }
00139
00140 rodsLog(
00141 LOG_NOTICE,
00142 "%s=%s",
00143 PAM_NO_EXTEND_KW,
00144 val );
00145
00146 }
00147
00148 key = strstr( buf, PAM_PW_MIN_TIME_KW );
00149 if( key != NULL ) {
00150 len = strlen( PAM_PW_MIN_TIME_KW );
00151 rstrcpy(
00152 rodsServerConfig->eirods_pam_password_min_time,
00153 findNextTokenAndTerm( key + len ),
00154 NAME_LEN );
00155 rodsLog(
00156 LOG_NOTICE,
00157 "%s=%s",
00158 PAM_PW_MIN_TIME_KW,
00159 rodsServerConfig->eirods_pam_password_min_time );
00160
00161 }
00162
00163 key = strstr( buf, PAM_PW_MAX_TIME_KW );
00164 if( key != NULL ) {
00165 len = strlen( PAM_PW_MAX_TIME_KW );
00166 rstrcpy(
00167 rodsServerConfig->eirods_pam_password_min_time,
00168 findNextTokenAndTerm( key + len ),
00169 NAME_LEN );
00170 rodsLog(
00171 LOG_NOTICE,
00172 "%s=%s",
00173 PAM_PW_MAX_TIME_KW,
00174 rodsServerConfig->eirods_pam_password_min_time );
00175
00176 }
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191 fchar = fgets(buf, BUF_LEN-1, fptr);
00192 }
00193 fclose (fptr);
00194
00195 if (strlen(rodsServerConfig->DBKey) > 0 &&
00196 strlen(rodsServerConfig->DBPassword) > 0) {
00197 char sPassword[MAX_PASSWORD_LEN+10];
00198 strncpy(sPassword, rodsServerConfig->DBPassword, MAX_PASSWORD_LEN);
00199 obfDecodeByKey(sPassword,
00200 rodsServerConfig->DBKey,
00201 rodsServerConfig->DBPassword);
00202 memset(sPassword, 0, MAX_PASSWORD_LEN);
00203 }
00204
00205 return(0);
00206 }
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226