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