def header(self, system_id, pkgList): """ Clients v1- IN: system_id: .... a package identifier (or a list of them) [n,v,r,e] or [[n,v,r,e],...] OUT: If Proxy: If Client: """ log_debug(5, system_id, pkgList) if type(pkgList) not in (ListType, TupleType) or not len(pkgList): log_error("Invalid package list spec", type(pkgList), "len = %d" % len(pkgList)) raise rhnFault(30, _("Invalid value %s (type %s)") % ( pkgList, type(pkgList))) # Okay, it's a list; is it a list of lists? if type(pkgList[0]) is StringType: # Wrap it in a list pkgList = [pkgList] # Now check all params req_list = [] for p in pkgList: req_list.append(check_package_spec(p)) # Authenticate the system certificate server = self.auth_system('header', system_id) # log the entry log_debug(1, self.server_id, "items: %d" % len(req_list)) rpmHeaders = [] for pkg in pkgList: # Authorize this package fetch. # XXX: a bit heavy-handed I think... but old client stuff. # NOTE: pkg for old client is [n,v,r,e] path = rhnPackage.get_package_path_compat_arches( self.server_id, pkg, server.archname) # read the header from the file on disk h = rhn_rpm.get_package_header(filename=path) if h is None: log_error("Unable to read package header", pkg) raise rhnFault(17, _("Unable to retrieve package header %s") % str(pkg)) rpmHeaders.append(rpclib.xmlrpclib.Binary(h.unload())) del h # Reset the flag for the proxy download accelerator # This gets set by default in rhnPackage rhnFlags.set("Download-Accelerator-Path", None) if CFG.COMPRESS_HEADERS: # Compress rhnFlags.set("compress_response", 1) return rpmHeaders
def package(self, system_id, package): """ Clients v1- Get rpm package. """ log_debug(5, "Begin", package) # Have package in canonical form package = check_package_spec(package) # Authenticate the system certificate and set the QoS data # according to the user type self.set_qos = 1 server = self.auth_system('package', system_id) # log the entry (avoiding to fill the log in case of abuse) log_debug(1, self.server_id, str(package)[:100]) filePath = rhnPackage.get_package_path_compat_arches(self.server_id, package, server.archname) return rpclib.File(open(filePath, "r"), name=filePath)