svn commit: r240534 - svnadmin/tools/svnssh
Bjoern A. Zeeb
bz at FreeBSD.org
Sat Sep 15 18:00:35 UTC 2012
Author: bz
Date: Sat Sep 15 18:00:34 2012
New Revision: 240534
URL: http://svn.freebsd.org/changeset/base/240534
Log:
Use SVN access files rather than CVS. At least doc is no longer
exported to CVS so new committers did not gain access.
Use a defined length for username (not ideal but better than 32).
Consistently use username and not pw->pw_name. Close the password
database files to ensure we cannot access them any more after copy.
Factor out reading access files for karma into a function; no longer
allow open to fail. Put #ifdef checks around all three file reads,
not just the extra two.
Move karma variable initializations to just before needed.
Modified:
svnadmin/tools/svnssh/svnssh.c
Modified: svnadmin/tools/svnssh/svnssh.c
==============================================================================
--- svnadmin/tools/svnssh/svnssh.c Sat Sep 15 17:47:44 2012 (r240533)
+++ svnadmin/tools/svnssh/svnssh.c Sat Sep 15 18:00:34 2012 (r240534)
@@ -31,9 +31,8 @@
#define SVNROOT "/s/svn"
#define BASEACCESS SVNROOT "/base/conf/access"
-/* Access cvs access files over nfs for now */
-#define DOCACCESS "/home/dcvs/CVSROOT/access"
-#define PORTSACCESS "/home/pcvs/CVSROOT/access"
+#define DOCACCESS SVNROOT "/doc/conf/access"
+#define PORTSACCESS SVNROOT "/ports/conf/access"
#define NOCOMMIT "/etc/nocommit"
@@ -44,7 +43,7 @@ static const char *env[] = {
NULL
};
-static char username[32];
+static char username[_SC_LOGIN_NAME_MAX + 1];
static char linebuf[1024];
static void
@@ -61,6 +60,7 @@ msg(const char *fmt, ...)
static void
usage(void)
{
+
msg("Only the \"svnserve -t\" command is available.");
exit(1);
}
@@ -80,7 +80,7 @@ shell(char *argv[], int interactive)
}
static int
-karmacheck(FILE *fp, char *name)
+karmacheck(FILE *fp, const char *name)
{
char buf[1024];
char *p, *s;
@@ -107,6 +107,26 @@ karmacheck(FILE *fp, char *name)
return karma;
}
+static int
+read_access(const char *accessf, const char *name)
+{
+ FILE *fp;
+ int karma;
+
+ karma = 0;
+ /* Must not fail. */
+ fp = fopen(accessf, "r");
+ if (fp == NULL) {
+ msg("Cannot open %s", accessf);
+ exit(1);
+ } else {
+ karma = karmacheck(fp, name);
+ fclose(fp);
+ }
+
+ return (karma);
+}
+
int
main(int argc, char *argv[])
{
@@ -119,12 +139,9 @@ main(int argc, char *argv[])
gid_t repogid;
gid_t mygroups[NGROUPS_MAX];
int ngroups;
- int karma;
- int shellkarma;
+ int karma, shellkarma;
umask(002);
- karma = 0;
- shellkarma = 0;
openlog("svnssh", LOG_PID | LOG_NDELAY, LOG_AUTH);
pw = getpwuid(getuid());
if (pw == NULL) {
@@ -136,9 +153,11 @@ main(int argc, char *argv[])
exit(1);
}
- /* save in a static buffer */
+ /* Save in a static buffer. */
strlcpy(username, pw->pw_name, sizeof(username));
+ endpwent();
+ shellkarma = 0;
ngroups = getgroups(NGROUPS_MAX, mygroups);
if (ngroups > 0) {
gr = getgrnam("shell");
@@ -191,27 +210,15 @@ main(int argc, char *argv[])
exit(1);
}
- fp = fopen(BASEACCESS, "r");
- if (fp == NULL) {
- msg("Cannot open %s", BASEACCESS);
- exit(1);
- } else {
- karma += karmacheck(fp, pw->pw_name);
- fclose(fp);
- }
+ karma = 0;
+#ifdef BASEACCESS
+ karma += read_access(BASEACCESS, username);
+#endif
#ifdef DOCACCESS
- /* Allow for failures due to NFS */
- if ((fp = fopen(DOCACCESS, "r")) != NULL) {
- karma += karmacheck(fp, pw->pw_name);
- fclose(fp);
- }
+ karma += read_access(DOCACCESS, username);
#endif
#ifdef PORTSACCESS
- /* Allow for failures due to NFS */
- if ((fp = fopen(PORTSACCESS, "r")) != NULL) {
- karma += karmacheck(fp, pw->pw_name);
- fclose(fp);
- }
+ karma += read_access(PORTSACCESS, username);
#endif
if (karma > 0) {
More information about the svn-src-svnadmin
mailing list