X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Futils.py;h=03cd589463c5e81908529c8d8ed17927d6082abc;hb=922bd52cf4fc88bdb802ff7f3f26beeca1f171c5;hp=f702db3fd74d44a93caa314310458fe1a4b16387;hpb=20fb8bcccb9c79bd5317856c3d8e6237021613de;p=dak.git diff --git a/daklib/utils.py b/daklib/utils.py old mode 100644 new mode 100755 index f702db3f..03cd5894 --- a/daklib/utils.py +++ b/daklib/utils.py @@ -27,6 +27,7 @@ import datetime import email.Header import os import pwd +import grp import select import socket import shutil @@ -1411,7 +1412,7 @@ def gpg_get_key_addresses(fingerprint): ################################################################################ -def get_login_from_ldap(fingerprint): +def get_logins_from_ldap(fingerprint='*'): """retrieve login from LDAP linked to a given fingerprint""" LDAPDn = Cnf['Import-LDAP-Fingerprints::LDAPDn'] @@ -1419,8 +1420,12 @@ def get_login_from_ldap(fingerprint): l = ldap.open(LDAPServer) l.simple_bind_s('','') Attrs = l.search_s(LDAPDn, ldap.SCOPE_ONELEVEL, - '(keyfingerprint=%s)' % fingerprint, ['uid']) - return Attrs[0][1]['uid'][0] + '(keyfingerprint=%s)' % fingerprint, + ['uid', 'keyfingerprint']) + login = {} + for elem in Attrs: + login[elem[1]['keyFingerPrint'][0]] = elem[1]['uid'][0] + return login ################################################################################ @@ -1437,31 +1442,69 @@ def clean_symlink (src, dest, root): ################################################################################ -def temp_filename(directory=None, prefix="dak", suffix=""): +def temp_filename(directory=None, prefix="dak", suffix="", mode=None, group=None): """ Return a secure and unique filename by pre-creating it. - If 'directory' is non-null, it will be the directory the file is pre-created in. - If 'prefix' is non-null, the filename will be prefixed with it, default is dak. - If 'suffix' is non-null, the filename will end with it. - Returns a pair (fd, name). + @type directory: str + @param directory: If non-null it will be the directory the file is pre-created in. + + @type prefix: str + @param prefix: The filename will be prefixed with this string + + @type suffix: str + @param suffix: The filename will end with this string + + @type mode: str + @param mode: If set the file will get chmodded to those permissions + + @type group: str + @param group: If set the file will get chgrped to the specified group. + + @rtype: list + @return: Returns a pair (fd, name) """ - return tempfile.mkstemp(suffix, prefix, directory) + (tfd, tfname) = tempfile.mkstemp(suffix, prefix, directory) + if mode: + os.chmod(tfname, mode) + if group: + gid = grp.getgrnam(group).gr_gid + os.chown(tfname, -1, gid) + return (tfd, tfname) ################################################################################ -def temp_dirname(parent=None, prefix="dak", suffix=""): +def temp_dirname(parent=None, prefix="dak", suffix="", mode=None, group=None): """ Return a secure and unique directory by pre-creating it. - If 'parent' is non-null, it will be the directory the directory is pre-created in. - If 'prefix' is non-null, the filename will be prefixed with it, default is dak. - If 'suffix' is non-null, the filename will end with it. - Returns a pathname to the new directory + @type parent: str + @param parent: If non-null it will be the directory the directory is pre-created in. + + @type prefix: str + @param prefix: The filename will be prefixed with this string + + @type suffix: str + @param suffix: The filename will end with this string + + @type mode: str + @param mode: If set the file will get chmodded to those permissions + + @type group: str + @param group: If set the file will get chgrped to the specified group. + + @rtype: list + @return: Returns a pair (fd, name) + """ - return tempfile.mkdtemp(suffix, prefix, parent) + tfname = tempfile.mkdtemp(suffix, prefix, parent) + if mode: + os.chmod(tfname, mode) + if group: + os.chown(tfname, -1, group) + return tfname ################################################################################