* Began (but did not finish) applying GPL3+ declarations to each source file. This...
[citadel.git] / citadel / client_passwords.c
index a70bcc4faf41de7e4b1390b1e1f497da1c694aa0..4922a12490996279ae926e86dd8217c5604892b8 100644 (file)
@@ -4,6 +4,21 @@
  * 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);
 }
 
 
@@ -45,22 +62,22 @@ void get_stored_password(
        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)) {
@@ -86,10 +103,10 @@ void set_stored_password(
        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");
@@ -97,24 +114,24 @@ void set_stored_password(
        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);
@@ -126,7 +143,7 @@ void set_stored_password(
 /*
  * 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,