* Functions which allow the client to remember usernames and passwords for
* various sites.
*
+ * Copyright (c) 1987-2009 by the citadel.org team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "sysdep.h"
#include <sys/stat.h>
#include <limits.h>
#include <stdio.h>
+#include <libcitadel.h>
#include "citadel.h"
-#include "tools.h"
+#include "citadel_ipc.h"
#include "commands.h"
+#include "client_passwords.h"
#define PWFILENAME "%s/.citadel.passwords"
-void determine_pwfilename(char *pwfile) {
+void determine_pwfilename(char *pwfile, size_t n) {
struct passwd *p;
p = getpwuid(getuid());
if (p == NULL) strcpy(pwfile, "");
- sprintf(pwfile, PWFILENAME, p->pw_dir);
+ snprintf(pwfile, n, PWFILENAME, p->pw_dir);
}
FILE *fp;
char buf[SIZ];
char buf64[SIZ];
- char hostbuf[SIZ], portbuf[SIZ], ubuf[SIZ], pbuf[SIZ];
+ char hostbuf[256], portbuf[256], ubuf[256], pbuf[256];
strcpy(username, "");
strcpy(password, "");
- determine_pwfilename(pwfile);
- if (strlen(pwfile)==0) return;
+ determine_pwfilename(pwfile, sizeof pwfile);
+ if (IsEmptyStr(pwfile)) return;
fp = fopen(pwfile, "r");
if (fp == NULL) return;
while (fgets(buf64, sizeof buf64, fp) != NULL) {
- decode_base64(buf, buf64);
- extract(hostbuf, buf, 0);
- extract(portbuf, buf, 1);
- extract(ubuf, buf, 2);
- extract(pbuf, buf, 3);
+ CtdlDecodeBase64(buf, buf64, sizeof(buf64));
+ extract_token(hostbuf, buf, 0, '|', sizeof hostbuf);
+ extract_token(portbuf, buf, 1, '|', sizeof portbuf);
+ extract_token(ubuf, buf, 2, '|', sizeof ubuf);
+ extract_token(pbuf, buf, 3, '|', sizeof pbuf);
if (!strcasecmp(hostbuf, host)) {
if (!strcasecmp(portbuf, port)) {
FILE *fp, *oldfp;
char buf[SIZ];
char buf64[SIZ];
- char hostbuf[SIZ], portbuf[SIZ], ubuf[SIZ], pbuf[SIZ];
+ char hostbuf[256], portbuf[256], ubuf[256], pbuf[256];
- determine_pwfilename(pwfile);
- if (strlen(pwfile)==0) return;
+ determine_pwfilename(pwfile, sizeof pwfile);
+ if (IsEmptyStr(pwfile)) return;
oldfp = fopen(pwfile, "r");
if (oldfp == NULL) oldfp = fopen("/dev/null", "r");
fp = fopen(pwfile, "w");
if (fp == NULL) fp = fopen("/dev/null", "w");
while (fgets(buf64, sizeof buf64, oldfp) != NULL) {
- decode_base64(buf, buf64);
- extract(hostbuf, buf, 0);
- extract(portbuf, buf, 1);
- extract(ubuf, buf, 2);
- extract(pbuf, buf, 3);
+ CtdlDecodeBase64(buf, buf64, sizeof(buf64));
+ extract_token(hostbuf, buf, 0, '|', sizeof hostbuf);
+ extract_token(portbuf, buf, 1, '|', sizeof portbuf);
+ extract_token(ubuf, buf, 2, '|', sizeof ubuf);
+ extract_token(pbuf, buf, 3, '|', sizeof pbuf);
if ( (strcasecmp(hostbuf, host))
|| (strcasecmp(portbuf, port)) ) {
- sprintf(buf, "%s|%s|%s|%s|",
+ snprintf(buf, sizeof buf, "%s|%s|%s|%s|",
hostbuf, portbuf, ubuf, pbuf);
- encode_base64(buf64, buf);
+ CtdlEncodeBase64(buf64, buf, strlen(buf), 0);
fprintf(fp, "%s\n", buf64);
}
}
- if (strlen(username) > 0) {
- sprintf(buf, "%s|%s|%s|%s|",
+ if (!IsEmptyStr(username)) {
+ snprintf(buf, sizeof buf, "%s|%s|%s|%s|",
host, port, username, password);
- encode_base64(buf64, buf);
+ CtdlEncodeBase64(buf64, buf, strlen(buf), 0);
fprintf(fp, "%s\n", buf64);
}
fclose(oldfp);
/*
* Set the password if the user wants to, clear it otherwise
*/
-void offer_to_remember_password(
+void offer_to_remember_password(CtdlIPC *ipc,
char *host,
char *port,
char *username,