Mercurial > ~mikael > mcabber > hg
comparison mcabber/src/main.c @ 306:b2d11b11675f
Fix interactive password prompt
author | Mikael Berthe <mikael@lilotux.net> |
---|---|
date | Tue, 12 Jul 2005 17:10:41 +0100 |
parents | 12f919be3da5 |
children | 566818afee1c |
comparison
equal
deleted
inserted
replaced
305:93d965185b4d | 306:b2d11b11675f |
---|---|
41 } else { | 41 } else { |
42 ut_WriteLog("Caught signal: %d\n", signum); | 42 ut_WriteLog("Caught signal: %d\n", signum); |
43 } | 43 } |
44 } | 44 } |
45 | 45 |
46 ssize_t my_getpass (char **passstr, size_t *n) | 46 void ask_password(void) |
47 { | 47 { |
48 char *password, *p; | |
49 size_t passsize = 128; | |
48 struct termios orig, new; | 50 struct termios orig, new; |
49 int nread; | 51 int nread; |
50 | 52 |
51 /* Turn echoing off and fail if we can't. */ | 53 /* Turn echoing off and fail if we can't. */ |
52 if (tcgetattr(fileno(stdin), &orig) != 0) | 54 if (tcgetattr(fileno(stdin), &orig) != 0) return; |
53 return -1; | |
54 new = orig; | 55 new = orig; |
55 new.c_lflag &= ~ECHO; | 56 new.c_lflag &= ~ECHO; |
56 if (tcsetattr(fileno(stdin), TCSAFLUSH, &new) != 0) | 57 if (tcsetattr(fileno(stdin), TCSAFLUSH, &new) != 0) return; |
57 return -1; | |
58 | 58 |
59 /* Read the password. */ | 59 /* Read the password. */ |
60 nread = getline(passstr, n, stdin); | 60 password = NULL; |
61 printf("Please enter password: "); | |
62 nread = getline(&password, &passsize, stdin); | |
61 | 63 |
62 /* Restore terminal. */ | 64 /* Restore terminal. */ |
63 (void) tcsetattr(fileno(stdin), TCSAFLUSH, &orig); | 65 tcsetattr(fileno(stdin), TCSAFLUSH, &orig); |
64 | 66 printf("\n"); |
65 return (ssize_t)nread; | 67 |
68 if (nread == -1 || !password) return; | |
69 | |
70 for (p = (char*)password; *p; p++) | |
71 ; | |
72 for ( ; p > (char*)password ; p--) | |
73 if (*p == '\n' || *p == '\r') *p = 0; | |
74 | |
75 settings_set(SETTINGS_TYPE_OPTION, "password", password); | |
76 free(password); | |
77 return; | |
66 } | 78 } |
67 | 79 |
68 void mcabber_connect(void) | 80 void mcabber_connect(void) |
69 { | 81 { |
70 const char *username, *password, *resource, *servername; | 82 const char *username, *password, *resource, *servername; |
165 if (configFile) g_free(configFile); | 177 if (configFile) g_free(configFile); |
166 | 178 |
167 optstring = settings_opt_get("debug"); | 179 optstring = settings_opt_get("debug"); |
168 if (optstring) ut_InitDebug(1, optstring); | 180 if (optstring) ut_InitDebug(1, optstring); |
169 | 181 |
170 // If no password is stored, we ask for it before entering | 182 /* If no password is stored, we ask for it before entering |
171 // ncurses mode | 183 ncurses mode */ |
172 if (!settings_opt_get("password")) { | 184 if (!settings_opt_get("password")) |
173 char *password, *p; | 185 ask_password(); |
174 size_t passsize = 64; | |
175 printf("Please enter password: "); | |
176 my_getpass((char**)&password, &passsize); | |
177 printf("\n"); | |
178 for (p = (char*)password; *p; p++) | |
179 ; | |
180 for ( ; p > (char*)password ; p--) | |
181 if (*p == '\n' || *p == '\r') *p = 0; | |
182 | |
183 settings_set(SETTINGS_TYPE_OPTION, "password", password); | |
184 } | |
185 | 186 |
186 /* Initialize N-Curses */ | 187 /* Initialize N-Curses */ |
187 ut_WriteLog("Initializing N-Curses...\n"); | 188 ut_WriteLog("Initializing N-Curses...\n"); |
188 scr_InitCurses(); | 189 scr_InitCurses(); |
189 | 190 |
206 ut_WriteLog("Ping interval stablished: %d secs\n", ping); | 207 ut_WriteLog("Ping interval stablished: %d secs\n", ping); |
207 | 208 |
208 if (settings_opt_get_int("hide_offline_buddies") > 0) | 209 if (settings_opt_get_int("hide_offline_buddies") > 0) |
209 buddylist_set_hide_offline_buddies(TRUE); | 210 buddylist_set_hide_offline_buddies(TRUE); |
210 | 211 |
211 // Connection | 212 /* Connection */ |
212 mcabber_connect(); | 213 if (settings_opt_get("password")) |
214 mcabber_connect(); | |
215 else | |
216 scr_LogPrint("Can't connect: no password supplied"); | |
213 | 217 |
214 /* Initialize commands system */ | 218 /* Initialize commands system */ |
215 cmd_init(); | 219 cmd_init(); |
216 | 220 |
217 ut_WriteLog("Entering into main loop...\n\n"); | 221 ut_WriteLog("Entering into main loop...\n\n"); |