1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import os
21 import base64
22 import sys
23 from rhn import rpclib
24
25 from spacewalk.common import apache, rhnFlags
26 from spacewalk.common.rhnLog import log_debug, log_error
27 from spacewalk.common.rhnConfig import CFG
28 from spacewalk.common.rhnException import rhnFault
29 from spacewalk.server.importlib.importLib import InvalidArchError
30 from spacewalk.server import rhnPackageUpload, rhnSQL, basePackageUpload
31
32
33 -class PackagePush(basePackageUpload.BasePackageUpload):
34
36 basePackageUpload.BasePackageUpload.__init__(self, req)
37 self.required_fields.extend([
38 'Auth',
39 'Force',
40 ])
41 self.null_org = None
42
43 self.packaging = 'rpm'
44 self.username = None
45 self.password = None
46 self.force = None
47 self.rel_package_path = None
48 self.org_id = None
49 self.package_path = None
50
52 ret = basePackageUpload.BasePackageUpload.headerParserHandler(self, req)
53
54 maps = [['Null-Org', 'null_org'], ['Packaging', 'packaging']]
55 for hn, sn in maps:
56 header_name = "%s-%s" % (self.header_prefix, hn)
57 if header_name in req.headers_in:
58 setattr(self, sn, req.headers_in[header_name])
59
60 if ret != apache.OK:
61 return ret
62
63 if CFG.SEND_MESSAGE_TO_ALL:
64 rhnSQL.closeDB()
65 log_debug(1, "send_message_to_all is set")
66
67 rhnFlags.set("apache-return-code", apache.HTTP_NOT_FOUND)
68 try:
69 outage_message = open(CFG.MESSAGE_TO_ALL).read()
70 except IOError:
71 log_error("Missing outage message file")
72 outage_message = "Outage mode"
73 raise rhnFault(20001, outage_message, explain=0)
74
75
76 rhnSQL.initDB()
77 use_session = 0
78 if self.field_data.has_key('Auth-Session'):
79 session_token = self.field_data['Auth-Session']
80 use_session = 1
81 else:
82 encoded_auth_token = self.field_data['Auth']
83
84 if not use_session:
85 auth_token = self.get_auth_token(encoded_auth_token)
86
87 if len(auth_token) < 2:
88 log_debug(3, auth_token)
89 raise rhnFault(105, "Unable to autenticate")
90
91 self.username, self.password = auth_token[:2]
92
93 force = self.field_data['Force']
94 force = int(force)
95 log_debug(1, "Username", self.username, "Force", force)
96
97 if use_session:
98 self.org_id, self.force = rhnPackageUpload.authenticate_session(session_token,
99 force=force, null_org=self.null_org)
100 else:
101
102 self.org_id, self.force = rhnPackageUpload.authenticate(self.username,
103 self.password, force=force, null_org=self.null_org)
104
105 return apache.OK
106
108 ret = basePackageUpload.BasePackageUpload.handler(self, req)
109 if ret != apache.OK:
110 return ret
111
112 a_pkg = rhnPackageUpload.save_uploaded_package(req,
113 (self.package_name, None, self.package_version,
114 self.package_release, self.package_arch),
115 str(self.org_id),
116 self.packaging,
117 self.file_checksum_type, self.file_checksum)
118
119 self.rel_package_path = rhnPackageUpload.relative_path_from_header(
120 a_pkg.header, org_id=self.org_id,
121 checksum_type=a_pkg.checksum_type, checksum=a_pkg.checksum)
122 self.package_path = os.path.join(CFG.MOUNT_POINT,
123 self.rel_package_path)
124
125 try:
126 package_dict, diff_level = rhnPackageUpload.push_package(a_pkg,
127 force=self.force,
128 relative_path=self.rel_package_path,
129 org_id=self.org_id)
130 except InvalidArchError:
131 e = sys.exc_info()[1]
132 req.write(str(e))
133 return apache.HTTP_NOT_ACCEPTABLE
134 except Exception:
135 e = sys.exc_info()[1]
136 req.write(str(e))
137 return apache.HTTP_BAD_REQUEST
138
139 if diff_level:
140 return self._send_package_diff(req, diff_level, package_dict)
141
142
143 rhnSQL.commit()
144 reply = "All OK"
145 req.headers_out['Content-Length'] = str(len(reply))
146 req.send_http_header()
147 req.write(reply)
148 log_debug(2, "Returning with OK")
149
150 return apache.OK
151
152 @staticmethod
165
166 @staticmethod
168 s = ''.join([x.strip() for x in value.split(',')])
169 arr = list(map(base64.decodestring, s.split(':')))
170 return arr
171