From: jgg <> Date: Tue, 28 Dec 1999 05:35:02 +0000 (+0000) Subject: SSH stuff X-Git-Tag: debian_userdir-ldap_0-3-7~180 X-Git-Url: https://git.adam-barratt.org.uk/?p=mirror%2Fuserdir-ldap.git;a=commitdiff_plain;h=bd63e867238eb6d8c5756f43f7e2f4681eb11098 SSH stuff --- diff --git a/ud-arbimport b/ud-arbimport index 5b64ed8..02430fb 100755 --- a/ud-arbimport +++ b/ud-arbimport @@ -27,19 +27,39 @@ Password = getpass(AdminUser + "'s password: "); # Connect to the ldap server l = ldap.open(LDAPServer); UserDn = "uid=" + AdminUser + "," + BaseDn; -l.simple_bind_s(UserDn,Password); +#l.simple_bind_s(UserDn,Password); List = open(arguments[1],"r"); +Set = []; +User = None; while(1): Line = List.readline(); - if Line == "": - break; - - Split = re.split("[:\n]",Line); + if Line != "": + # Glob similar lines + Split = re.split("[:\n]",Line); + if User == None: + User = Split[0]; + if Split[0] == User: + Set.append(string.strip(Split[1])); + continue; + else: + if len(Set) == 0: + break; - Rec = [(ldap.MOD_REPLACE,arguments[0],string.strip(Split[1]))]; - Dn = "uid=" + Split[0] + "," + BaseDn; + # Generate the command.. + Rec = [(ldap.MOD_REPLACE,arguments[0],Set[0])]; + for x in Set[1:]: + Rec.append((ldap.MOD_ADD,arguments[0],x)) + + Dn = "uid=" + User + "," + BaseDn; try: + print Dn,Rec; l.modify_s(Dn,Rec); except: print "Failed",Dn; + + # Out of data.. + if Line == "": + break; + User = Split[0]; + Set = [string.strip(Split[1])]; diff --git a/ud-sshlist b/ud-sshlist new file mode 100755 index 0000000..279dc98 --- /dev/null +++ b/ud-sshlist @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# -*- mode: python -*- +# This script takes a list of .forward files and generates a list of colon +# delimited fields for import into a ldap directory. The fields represent +# the user and their email forwarding. +# +# A sample invokation.. +# cd /home +# find -name ".foward" -maxdepth 2 | mkforwardlist | sort | less +# Then correct any invalid forward files if possible. After that stash the +# output in a file, remove the invalid lines and import it. +# +# It also understand .qmail type files + +import string, re, time, getopt, os, sys, pwd, stat; + +SSHAuthSplit = re.compile('^(.* )?(\d+) (\d+) (\d+) ?(.+)$'); + +while (1): + File = string.strip(sys.stdin.readline()); + if File == "": + break; + + # Attempt to determine the UID + try: + User = pwd.getpwuid(os.stat(File)[stat.ST_UID])[0]; + except KeyError: + print "Invalid0", File; + continue; + + # Read the first two non comment non empty lines + Forward = open(File,"r"); + Lines = []; + while (1): + Line = string.strip(Forward.readline()); + if Line == "": + break; + if Line[0] == '#' or Line[0] == '\n': + continue; + if SSHAuthSplit.match(Line) == None: + print "Bad line", File; + else: + Lines.append(Line); + + for x in Lines: + print User + ":",x; diff --git a/userdir_ldap.py b/userdir_ldap.py index 15e3875..adcc859 100644 --- a/userdir_ldap.py +++ b/userdir_ldap.py @@ -24,7 +24,7 @@ LastNamesPre = {"van": None, "le": None, "de": None, "di": None}; # SSH Key splitting. The result is: # (options,size,modulous,exponent,comment) -SSHAuthSplit = re.compile('^(.* )?(\d+) (\d+) (\d+) (.+)$'); +SSHAuthSplit = re.compile('^(.* )?(\d+) (\d+) (\d+) ?(.+)$'); #'^([^\d](?:[^ "]+(?:".*")?)*)? ?(\d+) (\d+) (\d+) (.+)$'); # Safely get an attribute from a tuple representing a dn and an attribute