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