Acked-by: Latchesar Ionkov <[EMAIL PROTECTED]>

On Nov 10, 2008, at 11:10 AM, Abhishek Kulkarni wrote:

2 files changed, 74 insertions(+), 49 deletions(-)
include/libxauth.h |    1
libxauth/xauth.c | 122 ++++++++++++++++++++++++++++++ +---------------------


# HG changeset patch
# User Abhishek Kulkarni <[EMAIL PROTECTED]>
# Date 1226339471 25200
# Node ID d6b08e79957d265e08d9d75a2ddc8b1d66444745
# Parent  8329b90e73f76f651cf65e2fd4e8cd75705e7405
libxauth changes

added function xauth_user_privkey() similar to xauth_user_pubkey(). this function returns the private key for the current user. removed some redundant code so that xauth_user_pubkey() now calls xauth_pubkey_create_from_file() to create the pub key.

Signed-off-by: Abhishek Kulkarni <[EMAIL PROTECTED]>

diff --git a/include/libxauth.h b/include/libxauth.h
--- a/include/libxauth.h
+++ b/include/libxauth.h
@@ -26,6 +26,7 @@
Xkey *xauth_pubkey_create_from_file(char *filename);
Xkey *xauth_privkey_create(char *filename);
Xkey *xauth_user_pubkey(void);
+Xkey *xauth_user_privkey(void);
void xauth_destroy(Xkey *);

int xauth_pubkey_encrypt(u8 *src, int slen, u8 *dst, int dlen, Xkey *);
diff --git a/libxauth/xauth.c b/libxauth/xauth.c
--- a/libxauth/xauth.c
+++ b/libxauth/xauth.c
@@ -125,6 +125,9 @@
        Xkey *ret;
        FILE *f;

+       if (!filename)
+               return xauth_user_privkey();
+
        f = fopen(filename, "r");
        if (!f) {
                sp_suerror(filename, errno);
@@ -153,7 +156,11 @@
xauth_pubkey_create_from_file(char *filename)
{
        int n, fd;
-       char buf[2048];
+       char *buf;
+       Xkey *ret;
+
+       if (!filename)
+               return xauth_user_pubkey();

        fd = open(filename, O_RDONLY);
        if (fd < 0) {
@@ -161,15 +168,34 @@
                return NULL;
        }

-       n = read(fd, buf, sizeof(buf));
+       ret = sp_malloc(sizeof(*ret));
+       if (!ret) {
+               close(fd);
+               return NULL;
+       }
+
+       n = lseek(fd, 0, SEEK_END);
+       lseek(fd, 0, SEEK_SET);
+       buf = sp_malloc(n);
+       if (!buf) {
+               close(fd);
+               free(ret);
+               return NULL;
+       }
+
+       n = read(fd, buf, n);
        if (n < 0) {
                close(fd);
+               free(ret);
+               free(buf);
                sp_suerror(filename, errno);
                return NULL;
        }
        close(fd);

-       return xauth_pubkey_create(buf, n);
+       ret = xauth_pubkey_create(buf, n);
+       free(buf);
+       return ret;
}

void
@@ -184,57 +210,28 @@
Xkey *
xauth_user_pubkey(void)
{
-       int fd;
        int n;
        struct passwd pw, *pwp;
        int bufsize;
        char *buf, kname[256];
-       Xkey *ret;

-       bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
-       if (bufsize < 256)
-               bufsize = 256;
-
-       buf = sp_malloc(bufsize);
-       if (!buf)
-               return NULL;
-
-       n = getpwuid_r(geteuid(), &pw, buf, bufsize, &pwp);
-       if (n) {
-               sp_uerror(n);
-               free(buf);
-               return NULL;
-       }
-
-       snprintf(kname, sizeof(kname), "%s/.ssh/id_rsa.pub", pw.pw_dir);
-       free(buf);
-
-       fd = open(kname, O_RDONLY);
-       if (fd < 0) {
-               sp_uerror(errno);
-               return NULL;
-       }
-
-       n = lseek(fd, 0, SEEK_END);
-       lseek(fd, 0, SEEK_SET);
-       buf = sp_malloc(n);
-       if (!buf) {
-               close(fd);
-               return NULL;
-       }
-
-       n = read(fd, buf, n);
-       if (n < 0) {
-               sp_uerror(errno);
-               close(fd);
-               return NULL;
-       }
-       close(fd);
-
-       ret = xauth_pubkey_create(buf, n);
-       free(buf);
-
-       return ret;
+        bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
+        if (bufsize < 256)
+                bufsize = 256;
+
+        buf = sp_malloc(bufsize);
+        if (!buf)
+                return NULL;
+
+        n = getpwuid_r(geteuid(), &pw, buf, bufsize, &pwp);
+        if (n) {
+                sp_uerror(n);
+                free(buf);
+                return NULL;
+        }
+ snprintf(kname, sizeof(kname), "%s/.ssh/id_rsa.pub", pw.pw_dir);
+        free(buf);
+       return xauth_pubkey_create_from_file(kname);
}

int
@@ -267,6 +264,33 @@
        }

        return len;
+}
+
+Xkey *
+xauth_user_privkey(void)
+{
+       int n;
+       struct passwd pw, *pwp;
+       int bufsize;
+       char *buf, kname[256];
+
+        bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
+        if (bufsize < 256)
+                bufsize = 256;
+
+        buf = sp_malloc(bufsize);
+        if (!buf)
+                return NULL;
+               
+        n = getpwuid_r(geteuid(), &pw, buf, bufsize, &pwp);
+        if (n) {
+                sp_uerror(n);
+                free(buf);
+                return NULL;
+        }
+        snprintf(kname, sizeof(kname), "%s/.ssh/id_rsa", pw.pw_dir);
+        free(buf);
+       return xauth_privkey_create(kname);
}

int

Reply via email to