Update of /cvsroot/fink/dists/10.4/stable/main/finkinfo/10.4-EOL/net
In directory vz-cvs-3.sog:/tmp/cvs-serv26372
Added Files:
drac1.info drac1.patch
Log Message:
sync. w/ 10.!4/stable, validated on powerpc-darwin8
--- NEW FILE: drac1.info ---
Package: drac1
Version: 1.12
Revision: 1013
###
Depends: db48-aes-shlibs | db48-shlibs, daemonic
BuildDepends: db48-aes | db48, fink (>= 0.24.12)
###
Source: ftp://ftp.cc.umanitoba.ca/src/drac.tar.Z
Source-MD5: fadaee589bf1dd9067222d58637d5fe4
NoSourceDirectory: true
###
PatchFile: %n.patch
PatchFile-MD5: 2eadf86e776dc57f0b8942d67ee780df
PatchScript: <<
sed -e 's,@FINKPREFIX@,%p,g' %{PatchFile} | patch -p1
<<
###
DocFiles: COPYRIGHT Changes INSTALL PORTING README
ConfFiles: <<
%p/etc/drac/dracd.allow
%p/var/lib/drac/dracd.db
<<
###
UseMaxBuildJobs: false
CompileScript: <<
make
<<
###
InstallScript: <<
mkdir -p %i/sbin
mkdir -p %i/share/man/man3
mkdir -p %i/share/man/man1
mkdir -p %i/lib
mkdir -p %i/include
mkdir -p %i/etc/drac
mkdir -p %i/var/lib/drac
make install DESTDIR=%d
touch %i/var/lib/drac/dracd.db
install -m 664 dracd.allow-sample %i/etc/drac/dracd.allow
install -m 644 libdrac.a %i/lib
install -m 644 drac.h %i/include
install -m 644 libdrac.1.12.0.dylib %i/lib
ln -s %p/lib/libdrac.1.12.0.dylib %i/lib/libdrac.1.dylib
ln -s %p/lib/libdrac.1.12.0.dylib %i/lib/libdrac.dylib
ln -s %p/sbin/rpc.dracd %i/sbin/dracd
install -m 644 rpc.dracd.1m %i/share/man/man1/rpc.dracd.1
install -m 644 dracauth.3 %i/share/man/man3
ln -s %p/share/man/man1/rpc.dracd.1 %i/share/man/man1/dracd.1
<<
###
SplitOff: <<
Package: %N-dev
Depends: %N-shlibs (= %v-%r)
BuildDependsOnly: true
Files: <<
lib/libdrac.a
lib/libdrac.dylib
include
share/man/man3
<<
Description: Dynamic Relay Authorization Control (develpement files)
<<
SplitOff2: <<
Package: %N-shlibs
Files: <<
lib/libdrac.*.dylib
<<
Shlibs: <<
%p/lib/libdrac.1.dylib 1.0.0 %n (>= 1.12-1)
<<
Description: Dynamic Relay Authorization Control (shared libraries)
<<
###
PostInstScript: <<
# update init script if necessary
daemonic update drac
<<
PreRmScript: <<
# clean up
[ -f %p/var/run/drac.pid ] && kill `cat %p/var/run/drac.pid`
if [ $1 != "upgrade" ]; then
daemonic remove drac
fi
<<
###
DaemonicName: drac
DaemonicFile: <<
<service>
<description>Dynamic Relay Authorization Control</description>
<message>Dynamic Relay Authorization Control</message>
<daemon name="drac">
<executable background="yes">%p/sbin/rpc.dracd</executable>
<parameters> -i -e 30 %p/var/lib/drac/dracd.db</parameters>
<configfile>%p/etc/ffserver.conf</configfile>
<pidfile>%p/var/run/drac.pid</pidfile>
</daemon>
</service>
<<
###
Description: Dynamic Relay Authorization Control
DescDetail: <<
DRAC is a daemon that dynamically updates a relay authorization map for
sendmail. It provides a way to allow legitimate users to relay mail through
an SMTP server, while still preventing others from using it as a spam relay.
User's IP addresses are added to the map immediately after they have
authenticated to the POP or IMAP server. By default, map entries expire
after 30 minutes, but can be renewed by additional authentication.
Periodically checking mail on a POP server is sufficient to do this. The
POP and SMTP servers can be on different hosts.
<<
###
License: GPL
Maintainer: Justin F. Hallett <[email protected]>
Homepage: http://mail.cc.umanitoba.ca/drac
--- NEW FILE: drac1.patch ---
diff -Nurd -x'*~' drac.orig/Makefile drac/Makefile
--- drac.orig/Makefile 2003-01-12 15:45:12.000000000 -0500
+++ drac/Makefile 2012-01-18 12:07:31.000000000 -0500
@@ -5,9 +5,10 @@
# Paths
-INSTALL = /usr/ucb/install
-EBIN = /usr/local/sbin
-MAN = /usr/local/man/man
+DESTDIR =
+INSTALL = /usr/bin/install
+EBIN = @FINKPREFIX@/sbin
+MAN = @FINKPREFIX@/share/man/man
# OS-Dependant settings
@@ -33,26 +34,26 @@
# -DCIDR_KEY # keys in CIDR format
# -DTERM_KD # keys and data nul-terminated
-DEFS = -DTI_RPC -DFCNTL_LOCK -DSYSINFO
+DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C
# Compiler flags
CC = cc
-RANLIB = :
-CFLAGS = $(DEFS) -g -I/usr/local/src/db/db-4.1.25/build_unix
+RANLIB = /usr/bin/ranlib
+CFLAGS = $(DEFS) -g -fno-common -I@FINKPREFIX@/include/db4
#CFLAGS = $(DEFS) -g -I/usr/local/src/db/db-3.1.17/build_unix
#CFLAGS = $(DEFS) -g -I/usr/local/src/db/db-2.4.14/Unix
#CFLAGS = $(DEFS) -g -I/usr/local/src/db/db.1.85/PORT/sunos.5.2/include
-LDLIBS = -L/usr/local/src/db/db-4.1.25/build_unix -lnsl -ldb-4.1
+LDLIBS = -L@FINKPREFIX@/lib -ldb-4.8
#LDLIBS = -L/usr/local/src/db/db-3.1.17/build_unix -lnsl -ldb
#LDLIBS = -L/usr/local/src/db/db-2.4.14/Unix -lnsl -ldb
#LDLIBS = -L/usr/local/src/db/db.1.85/PORT/sunos.5.2 -lnsl -ldb
-TSTLIBS = -L. -ldrac -lnsl
-RPCGENFLAGS =
-#RPCGENFLAGS = -C
+TSTLIBS = libdrac.1.12.0.dylib
+#RPCGENFLAGS =
+RPCGENFLAGS = -C
# Man sections
MANLIB = 3
-MANADM = 1m
+MANADM = 8
## Nothing to change after this point
@@ -70,6 +71,7 @@
# Final targets
CLIENT = testing
+CLIENT6 = testing6
SERVER = rpc.dracd
LIBRAR = libdrac.a
@@ -86,13 +88,14 @@
LIB_OBJ = dracauth.o
SVC_OBJ = rpc.dracd.o
TST_OBJ = testing.o
+TST6_OBJ = testing6.o
H_OBJS = drac_xdr.o drac_svc.o drac_clnt.o $(SVC_OBJ) $(LIB_OBJ)
L_OBJS = $(LIB_OBJ) drac_xdr.o drac_clnt.o
S_OBJS = $(SVC_OBJ) drac_xdr.o drac_svc.o
# Rules
-all: $(CLIENT) $(SERVER)
+all: $(CLIENT) $(CLIENT6) $(SERVER)
$(RPC_ALL): $(RPC_SRC)
rpcgen $(RPCGENFLAGS) $(RPC_SRC)
@@ -103,12 +106,18 @@
$(LIBRAR): $(L_OBJS)
rm -f $@
+ $(CC) -dynamiclib -install_name @FINKPREFIX@/lib/libdrac.1.dylib \
+ -compatibility_version 1.0 -current_version 1.12.0 \
+ -o libdrac.1.12.0.dylib $(L_OBJS)
ar cq $@ $(L_OBJS)
$(RANLIB) $@
$(CLIENT): $(TST_OBJ) $(LIBRAR)
$(CC) -o $(CLIENT) $(TST_OBJ) $(TSTLIBS)
+$(CLIENT6): $(TST6_OBJ) $(LIBRAR)
+ $(CC) -o $(CLIENT6) $(TST6_OBJ) $(TSTLIBS)
+
$(SERVER): $(S_OBJS)
$(CC) -o $(SERVER) $(S_OBJS) $(LDLIBS)
@@ -120,9 +129,9 @@
tar cf drac.tar $(PACKAGE)
install: $(SERVER)
- $(INSTALL) -c -o bin -g bin -m 0755 $(SERVER) $(EBIN)
+ $(INSTALL) -c -m 0755 $(SERVER) $(DESTDIR)$(EBIN)
install-man: $(SERVER).1m dracauth.3
- $(INSTALL) -c -m 0444 $(SERVER).1m $(MAN)$(MANADM)/$(SERVER).$(MANADM)
- $(INSTALL) -c -m 0444 dracauth.3 $(MAN)$(MANLIB)/dracauth.$(MANLIB)
+ $(INSTALL) -c -m 0444 $(SERVER).1m
$(DESTDIR)$(MAN)$(MANADM)/$(SERVER).$(MANADM)
+ $(INSTALL) -c -m 0444 dracauth.3
$(DESTDIR)$(MAN)$(MANLIB)/dracauth.$(MANLIB)
diff -Nurd -x'*~' drac.orig/drac.x drac/drac.x
--- drac.orig/drac.x 1998-08-10 22:01:18.000000000 -0400
+++ drac/drac.x 2012-01-18 11:57:49.000000000 -0500
@@ -17,6 +17,10 @@
unsigned long ip_addr; /* In network order */
};
+struct drac_add_parm6 {
+ char ip_addr6[16]; /* In network order */
+};
+
enum addstat {
ADD_SUCCESS, /* Succeeded */
ADD_PERM, /* Permission denied */
@@ -32,4 +36,11 @@
addstat
DRACPROC_ADD(drac_add_parm) = 1;
} = 1;
+ version DRACVERS6 {
+ /*
+ * Update my passwd entry
+ */
+ addstat
+ DRACPROC_ADD(drac_add_parm6) = 1;
+ } = 2;
} = 900101;
diff -Nurd -x'*~' drac.orig/dracauth.c drac/dracauth.c
--- drac.orig/dracauth.c 1999-06-24 22:15:12.000000000 -0400
+++ drac/dracauth.c 2012-01-18 11:57:49.000000000 -0500
@@ -135,4 +135,121 @@
return 0;
}
+int
+dracauth6(server, userip6, errmsg)
+ char *server; unsigned char userip6[16]; char **errmsg; {
+
+ CLIENT *clnt6;
+ addstat *result;
+ drac_add_parm6 dracproc_add_2_arg;
+
+#ifdef TI_RPC
+ clnt6 = clnt_create(server, DRACPROG, DRACVERS6, "datagram_v");
+#endif
+#ifdef SOCK_RPC
+ clnt6 = clnt_create(server, DRACPROG, DRACVERS6, "udp");
+#endif
+ if (clnt6 == (CLIENT *) NULL) {
+ if ( errmsg ) *errmsg = clnt_spcreateerror(server);
+ return (-1);
+ }
+ memcpy(dracproc_add_2_arg.ip_addr6, userip6,
+ sizeof(dracproc_add_2_arg.ip_addr6));
+ result = dracproc_add_2(&dracproc_add_2_arg, clnt6);
+ if (result == (addstat *) NULL) {
+ if ( errmsg ) *errmsg = clnt_sperror(clnt, "call failed");
+ clnt_destroy(clnt6);
+ return (-2);
+ }
+ clnt_destroy(clnt6);
+ if ( errmsg ) {
+ switch (*result) {
+ case ADD_SUCCESS:
+ *errmsg = "Server reports add succeeded";
+ break;
+ case ADD_PERM:
+ *errmsg = "Server reports permission denied";
+ break;
+ case ADD_SYSERR:
+ *errmsg = "Server reports system error";
+ break;
+ default:
+ *errmsg = "Server reports unknown error";
+ }
+ }
+ return *result;
+}
+
+static CLIENT *clnt6;
+
+int
+dracconn6(server, errmsg)
+ char *server; char **errmsg; {
+
+#ifdef TI_RPC
+ clnt6 = clnt_create(server, DRACPROG, DRACVERS6, "datagram_v");
+#endif
+#ifdef SOCK_RPC
+ clnt6 = clnt_create(server, DRACPROG, DRACVERS6, "udp");
+#endif
+ if (clnt6 == (CLIENT *) NULL) {
+ if ( errmsg ) *errmsg = clnt_spcreateerror(server);
+ return (-1);
+ }
+ if ( errmsg ) *errmsg = "Connect succeeded";
+ return 0;
+}
+
+
+int
+dracsend6(userip6, errmsg)
+ unsigned char userip6[16]; char **errmsg; {
+
+ addstat *result;
+ drac_add_parm6 dracproc_add_2_arg;
+
+ if (clnt6 == (CLIENT *) NULL) {
+ if ( errmsg ) *errmsg = "Not connected";
+ return (-1);
+ }
+ memcpy(dracproc_add_2_arg.ip_addr6, userip6,
+ sizeof(dracproc_add_2_arg.ip_addr6));
+ result = dracproc_add_2(&dracproc_add_2_arg, clnt6);
+ if (result == (addstat *) NULL) {
+ if ( errmsg ) *errmsg = clnt_sperror(clnt6, "call failed");
+ return (-2);
+ }
+ if ( errmsg ) {
+ switch (*result) {
+ case ADD_SUCCESS:
+ *errmsg = "Server reports add succeeded";
+ break;
+ case ADD_PERM:
+ *errmsg = "Server reports permission denied";
+ break;
+ case ADD_SYSERR:
+ *errmsg = "Server reports system error";
+ break;
+ default:
+ *errmsg = "Server reports unknown error";
+ }
+ }
+ return *result;
+}
+
+
+int
+dracdisc6(errmsg)
+ char **errmsg; {
+
+ if (clnt6 == (CLIENT *) NULL) {
+ if ( errmsg ) *errmsg = "Not connected";
+ return (-1);
+ }
+ clnt_destroy(clnt6);
+ clnt6 = (CLIENT *) NULL;
+ if ( errmsg ) *errmsg = "Disconnect succeeded";
+ return 0;
+}
+
/**/
diff -Nurd -x'*~' drac.orig/rpc.dracd.1m drac/rpc.dracd.1m
--- drac.orig/rpc.dracd.1m 1998-07-23 11:13:59.000000000 -0400
+++ drac/rpc.dracd.1m 2012-01-18 11:57:49.000000000 -0500
@@ -2,7 +2,7 @@
'\"macro stdmacro
.\" Copyright University of Manitoba 1998.
.nr X
-.TH rpc.dracd 1M "22 Jul 1998"
+.TH rpc.dracd 8 "22 Jul 1998"
.SH NAME
rpc.dracd \- Dynamic Relay Authorization Control server
.SH SYNOPSIS
@@ -16,13 +16,13 @@
\f4rpc.dracd\f1
is the Dynamic Relay Authorization Control server.
It uses the Berkeley db package to maintain a relay authorization
-map for sendmail, by default \f4/etc/mail/dracd.db\f1.
+map for sendmail, by default \f4@FINKPREFIX@/var/lib/drac/dracd.db\f1.
POP and IMAP mail servers make an RPC call to add an entry to the
authorization cache after they have authenticated each user.
The daemon, rpc.dracd, adds or updates entries in the cache, and
periodically expires old entries.
Only trusted mail servers are permitted to communicate with rpc.dracd,
-as controlled by \f4/etc/mail/dracd.allow\f1.
+as controlled by \f4@FINKPREFIX@/var/lib/drac/dracd.allow\f1.
If this file does not exist, all local IP addresses are permitted.
.SS Allow File Format
The Allow File file consists of entries of the form:
@@ -58,10 +58,10 @@
.SH FILES
.PD 0
.TP 30
-.B /etc/mail/dracd.db
+.B @FINKPREFIX@/var/lib/drac/dracd.db
default database file
.TP
-.B /etc/mail/dracd.allow
+.B @FINKPREFIX@/etc/drac/dracd.allow
default allow file.
.PD
.SH SEE ALSO
diff -Nurd -x'*~' drac.orig/rpc.dracd.c drac/rpc.dracd.c
--- drac.orig/rpc.dracd.c 2003-01-12 15:22:22.000000000 -0500
+++ drac/rpc.dracd.c 2012-01-18 11:57:49.000000000 -0500
@@ -36,8 +36,8 @@
#endif
#include "drac.h"
-#define DBFILE "/etc/mail/dracd.db"
-#define ALFILE "/etc/mail/dracd.allow"
+#define DBFILE "@FINKPREFIX@/var/lib/drac/dracd.db"
+#define ALFILE "@FINKPREFIX@/etc/drac/dracd.allow"
struct net_def {
struct net_def *nd_next;
@@ -356,6 +356,128 @@
return (&result);
}
+/* Add an entry to the database */
+addstat *
+#ifdef DASH_C
+dracproc_add_2_svc(argp, rqstp)
+#else
+dracproc_add_2(argp, rqstp)
+#endif
+ drac_add_parm6 *argp;
+ struct svc_req *rqstp; {
+
+ static addstat result;
+ char buf[INET6_ADDRSTRLEN];
+#ifdef TI_RPC
+ struct netbuf *nb;
+ struct netconfig *nc;
+ char *cad, *pt;
+#endif
+#ifdef SOCK_RPC
+ struct sockaddr_in *si;
+#endif
+ struct in_addr client_ip;
+ struct in6_addr requ_ip;
+ DBT key, data;
+ char akey[INET6_ADDRSTRLEN+4], alimit[32];
+ struct net_def *nd;
+
+ result = ADD_SUCCESS;
+
+ /* Get the IP address of the client */
+#ifdef TI_RPC
+ if ( (nc = getnetconfigent(rqstp->rq_xprt->xp_netid)) == NULL
+ || (nb = svc_getrpccaller(rqstp->rq_xprt)) == NULL
+ || (cad = taddr2uaddr(nc, nb)) == NULL ) {
+ if (nc) freenetconfigent(nc);
+ result = ADD_SYSERR;
+ return (&result);
+ }
+ if ( (pt = strrchr(cad, '.')) != NULL ) *pt = '\0';
+ if ( (pt = strrchr(cad, '.')) != NULL ) *pt = '\0';
+ client_ip.s_addr = inet_addr(cad);
+ freenetconfigent(nc);
+ free(cad);
+#endif
+#ifdef SOCK_RPC
+ if ( (si = svc_getcaller(rqstp->rq_xprt)) == NULL ) {
+ result = ADD_SYSERR;
+ return (&result);
+ }
+ client_ip.s_addr = si->sin_addr.s_addr;
+#endif
+#ifdef DEBUG
+ fprintf(debugf, "Client Address: %s\n", inet_ntoa(client_ip));
+ fflush(debugf);
+#endif
+
+ /* Check agains the table of trusted clients */
+ for ( nd = net_tbl; nd != NULL; nd = nd->nd_next ) {
+ if ( (client_ip.s_addr & nd->nd_mask.s_addr)
+ == nd->nd_addr.s_addr ) break;
+ }
+ if ( nd == NULL ) {
+ result = ADD_PERM;
+ return (&result);
+ }
+
+ /* Set up for the add */
+ memcpy(requ_ip.s6_addr, argp->ip_addr6,
+ sizeof(requ_ip.s6_addr));
+#ifdef DEBUG
+ fprintf(debugf, "Requested IP Address: %s\n",
+ inet_ntop(AF_INET6, requ_ip.s6_addr, buf, sizeof(buf)));
+ fflush(debugf);
+#endif
+ memset(&key, 0, sizeof(DBT));
+ memset(&data, 0, sizeof(DBT));
+ inet_ntop(AF_INET6, requ_ip.s6_addr, akey, sizeof(akey)-4);
+#ifdef CIDR_KEY
+ strcat(akey, "/128");
+#endif
+ key.data = akey;
+#ifdef TERM_KD
+ key.size = strlen(akey) + 1;
+#else
+ key.size = strlen(akey);
+#endif
+ sprintf(alimit, "%lu", time((time_t *)NULL) + explimit);
+ data.data = alimit;
+#ifdef TERM_KD
+ data.size = strlen(alimit) + 1;
+#else
+ data.size = strlen(alimit);
+#endif
+
+ /* Do the add and sync, with locking */
+ if ( lockdb() == (-1) ) {
+ syslog(LOG_ERR, "dracproc_add_1 lockdb failed: %m");
+ }
+#if DB_VERSION_MAJOR < 2
+ errno = 0;
+ dbp->put(dbp, &key, &data, 0);
+#else
+ errno = dbp->put(dbp, NULL, &key, &data, 0);
+#endif
+ if ( errno != 0 ) {
+ syslog(LOG_ERR, "dracproc_add_1 put failed: %m");
+ result = ADD_SYSERR;
+ }
+#if DB_VERSION_MAJOR < 2
+ errno = 0;
+ dbp->sync(dbp, 0);
+#else
+ errno = dbp->sync(dbp, 0);
+#endif
+ if ( errno != 0 ) {
+ syslog(LOG_ERR, "dracproc_add_1 sync failed: %m");
+ }
+ (void)unlockdb();
+
+ /* Send result code back to client */
+ return (&result);
+}
+
/* Expire old entries from the database */
expire() {
#if DB_VERSION_MAJOR < 2
diff -Nurd -x'*~' drac.orig/testing6.c drac/testing6.c
--- drac.orig/testing6.c 1969-12-31 19:00:00.000000000 -0500
+++ drac/testing6.c 2012-01-18 11:57:49.000000000 -0500
@@ -0,0 +1,28 @@
+/*
+ * Test client for dracauth
+ */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+ int rc;
+ char *host;
+ unsigned char ip6[16];
+ char *err;
+
+ if (argc < 3) {
+ printf("usage: %s server_host client_addr\n", argv[0]);
+ exit(1);
+ }
+ host = argv[1];
+ inet_pton(AF_INET6, argv[2], ip6);
+ rc = dracauth6(host, ip6, &err);
+ if (rc != 0) printf("%s: %s\n", argv[0], err);
+}
------------------------------------------------------------------------------
Better than sec? Nothing is better than sec when it comes to
monitoring Big Data applications. Try Boundary one-second
resolution app monitoring today. Free.
http://p.sf.net/sfu/Boundary-dev2dev
_______________________________________________
Fink-commits mailing list
[email protected]
http://news.gmane.org/gmane.os.apple.fink.cvs