]> git.pld-linux.org Git - projects/pld-builder.new.git/commitdiff
- acl.conf for bin_builders need now only entry for src_builder
authorMichal Moskal <michal@moskal.me>
Mon, 16 Jun 2003 09:47:41 +0000 (09:47 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    PLD_Builder/acl.py -> 1.16
    PLD_Builder/build.py -> 1.2
    PLD_Builder/buildlogs.py -> 1.10
    PLD_Builder/file_sender.py -> 1.9
    PLD_Builder/ftp.py -> 1.7
    PLD_Builder/log.py -> 1.7
    PLD_Builder/mailer.py -> 1.6
    PLD_Builder/report.py -> 1.3
    PLD_Builder/request.py -> 1.17
    PLD_Builder/request_handler.py -> 1.18
    PLD_Builder/rpm_builder.py -> 1.13
    PLD_Builder/srpm_builder.py -> 1.19
    config/builder.conf -> 1.15
    doc/TODO -> 1.16

14 files changed:
PLD_Builder/acl.py
PLD_Builder/build.py
PLD_Builder/buildlogs.py
PLD_Builder/file_sender.py
PLD_Builder/ftp.py
PLD_Builder/log.py
PLD_Builder/mailer.py
PLD_Builder/report.py
PLD_Builder/request.py
PLD_Builder/request_handler.py
PLD_Builder/rpm_builder.py
PLD_Builder/srpm_builder.py
config/builder.conf
doc/TODO

index a0acdcc0be23e7a7724bde0e0b4d0417d0b3fb6f..68ff334bf0c8c4fa64fc1efa2f450493dadb987e 100644 (file)
@@ -87,6 +87,8 @@ class ACL_Conf:
     return None
 
   def user(self, l):
+    if not self.users.has_key(l):
+      log.panic("no such user: %s" % l)
     return self.users[l]
 
   def set_current_user(self, u):
index c7a052c720e93acf292b6d2d990ed661a3f54529..edb6e85687f7027a41e1bb4b51aefbcdded6fdf8 100644 (file)
@@ -2,7 +2,6 @@ import string
 import os
 import atexit
 
-from acl import acl
 import notify
 import path
 import util
@@ -11,9 +10,10 @@ import stopwatch
 import report
 import log
 import buildlogs
+import status
 
 def build_all(r, build_fnc):
-  acl.set_current_user(acl.user(r.requester))
+  status.email = r.requester_email
   notify.begin(r)
   tmp = path.spool_dir + util.uuid() + "/"
   r.tmp_dir = tmp
index 9032dafde73059cee5b6211d7c6d591be20cc254..874668797e2c53356da845037bf65f8e1c42ff66 100644 (file)
@@ -4,13 +4,15 @@ import os
 
 from config import config
 import util
-from acl import acl
 
 class Buildlogs_Queue:
   def __init__(self):
     self.queue = []
     self.some_failed = 0
 
+  def init(self, g):
+    self.requester_email = g.requester_email
+
   def add(self, logfile, failed):
     # if /dev/null, don't even bother to store it
     if config.buildlogs_url == "/dev/null":
@@ -35,7 +37,7 @@ Builder: %s
 Time: %d
 Requester: %s
 END
-""" % (config.buildlogs_url, l['name'], config.builder, time.time(), acl.current_user_login())
+""" % (config.buildlogs_url, l['name'], config.builder, time.time(), self.requester_email)
     
     for l in self.queue:
       f = open(path.buildlogs_queue_dir + l['id'] + ".desc", "w")
@@ -44,6 +46,9 @@ END
 
 queue = Buildlogs_Queue()
 
+def init(r):
+  queue.init(r)
+
 def add(logfile, failed):
   "Add new buildlog with specified status."
   queue.add(logfile, failed)
index c96d4a268b01ec7bb3db023106be1593c25498a1..df164e23dcce28aaf6653b8dfd6d060171acf88a 100644 (file)
@@ -5,7 +5,6 @@ import os
 import time
 import shutil
 
-from acl import acl
 from config import config, init_conf
 import mailer
 import path
@@ -137,14 +136,12 @@ def flush_queue(dir):
     remaining = q[1:]
     
   if error != None:
-    users = {}
+    emails = {}
+    emails[config.admin_email] = 1
     for d in remaining:
       if d.has_key('Requester'):
-        r = d['Requester']
-        if r != "" and not users.has_key(r):
-          users[r] = acl.user(r)
-    e = [config.admin_email]
-    for u in users.values(): e.append(u.mail_to())
+        emails[d['Requester']] = 1
+    e = emails.keys()
     m = mailer.Message()
     m.set_headers(to = string.join(e, ", "), 
                   subject = "builder queue problem")
index e92dc09d5b00d7c8ed304470583fd77d4e4a4929..490f702cdd8d05beb3fa0a719950dc29e824d277 100644 (file)
@@ -5,7 +5,6 @@ import time
 
 from config import config
 import util
-from acl import acl
 
 class FTP_Queue:
   def __init__(self):
@@ -15,6 +14,7 @@ class FTP_Queue:
 
   def init(self, g):
     self.queue = []
+    self.requester_email = g.requester_email
     if "test-build" in g.flags:
       self.url = config.test_ftp_url
     else:
@@ -35,7 +35,7 @@ class FTP_Queue:
     def desc(l):
       return "Target: %s/%s\nBuilder: %s\nTime: %d\nRequester: %s\nEND\n" % \
                 (self.url, l['name'], config.builder, time.time(), 
-                 acl.current_user_login())
+                 self.requester_email)
     
     for l in self.queue:
       f = open(path.ftp_queue_dir + l['id'] + ".desc", "w")
index c8d93d98e66aa9f5d70a40cc7bd6c4c189a13b18..2e95103e8bdafb4025c7ba1f9b5c9efa14f620b0 100644 (file)
@@ -16,7 +16,7 @@ def log(p, s):
   
 def panic(s):
   log(syslog.LOG_ALERT, "PANIC: %s" % s)
-  raise "PANIC: %s" % s
+  raise "PANIC: %s" % str(s)
 
 def alert(s):
   log(syslog.LOG_ALERT, "alert: %s" % s) 
index aa93ead5b5c259409e0ff64539ba1b89ad2baa31..4de76f3a565518bab789563fdab5c9287d715516 100644 (file)
@@ -50,7 +50,7 @@ class Message:
 
   def set_std_headers(self):
     self.headers["Date"] = time.asctime()
-    self.headers["Message-ID"] = "<pld-builder.%d.%d@%s>" \
+    self.headers["Message-ID"] = "<pld-builder.%f.%d@%s>" \
         % (time.time(), os.getpid(), os.uname()[1])
     self.headers["From"] = "PLD %s builder <%s>" \
         % (config.builder, config.email)
index 0a5d64948e1c2d48371f7c953f5dd2d74cc506dc..81b5c1ef1d107824db79a9023307cf81ceac10b7 100644 (file)
@@ -2,7 +2,7 @@ import string
 
 import ftp
 import stopwatch
-from acl import acl
+import mailer
 
 def unpackaged_files(b):
   msg = "warning: Installed (but unpackaged) file(s) found:\n"
@@ -59,8 +59,9 @@ def send_report(r):
   if s_ok != []:
     subject += " OK: " + string.join(names(s_ok))
   
-  m = acl.user(r.requester).message_to()
-  m.set_headers(subject = subject[0:100])
+  m = mailer.Message()
+  m.set_headers(to = r.requester_email,
+                subject = subject[0:100])
 
   for b in r.batches:
     if b.build_failed and b.logfile == None:
index 271f1bf36ae08a31616650a7e492d0b9f6d2ad0e..8d9b1e1f1408acda0491015344db17878dda0ffd 100644 (file)
@@ -5,19 +5,17 @@ import xml.sax.saxutils
 
 import util
 import log
+from acl import acl
 
 __all__ = ['parse_request', 'parse_requests']
   
 def text(e):
-  if len(e.childNodes) == 0:
-    return ""
-  elif len(e.childNodes) == 1:
-    n = e.childNodes[0]
+  res = ""
+  for n in e.childNodes:
     if n.nodeType != Element.TEXT_NODE:
-      raise "xml: text expected: <%s>" % e.nodeName
-    return n.nodeValue
-  else:
-    raise "xml: text expected: <%s>" % e.nodeName
+      log.panic("xml: text expected in <%s>, got %d" % (e.nodeName, n.nodeType))
+    res += n.nodeValue
+  return res
 
 def attr(e, a, default = None):
   try:
@@ -42,21 +40,23 @@ class Group:
     self.priority = 2
     self.time = time.time()
     self.requester = ""
+    self.requester_email = ""
     self.flags = string.split(attr(e, "flags", ""))
     for c in e.childNodes:
       if is_blank(c): continue
       if c.nodeType != Element.ELEMENT_NODE:
-        raise "xml: evil group child %d" % c.nodeType
+        log.panic("xml: evil group child %d" % c.nodeType)
       if c.nodeName == "batch":
         self.batches.append(Batch(c))
       elif c.nodeName == "requester":
         self.requester = text(c)
+        self.requester_email = attr(c, "email", "")
       elif c.nodeName == "priority":
         self.priority = int(text(c))
       elif c.nodeName == "time":
         self.time = int(text(c))
       else:
-        raise "xml: evil group child (%s)" % c.nodeName
+        log.panic("xml: evil group child (%s)" % c.nodeName)
     # note that we also check that group is sorted WRT deps
     m = {}
     for b in self.batches:
@@ -68,8 +68,10 @@ class Group:
           if id(m[dep]) != id(b):
             deps.append(m[dep])
         else:
-          raise "xml: dependency not found in group"
+          log.panic("xml: dependency not found in group")
       b.depends_on = deps
+    if self.requester_email == "" and self.requester != "":
+      self.requester_email = acl.user(self.requester).mail_to()
 
   def dump(self, f):
     f.write("group: %d (id=%s pri=%d)\n" % (self.no, self.id, self.priority))
@@ -95,10 +97,11 @@ class Group:
   def write_to(self, f):
     f.write("""
        <group id="%s" no="%d" flags="%s">
-         <requester>%s</requester>
+         <requester email='%s'>%s</requester>
          <time>%d</time>
          <priority>%d</priority>\n""" % (self.id, self.no, string.join(self.flags),
-                escape(self.requester), self.time, self.priority))
+                escape(self.requester_email), escape(self.requester), 
+                self.time, self.priority))
     for b in self.batches:
       b.write_to(f)
     f.write("       </group>\n\n")
@@ -125,7 +128,7 @@ class Batch:
     for c in e.childNodes:
       if is_blank(c): continue
       if c.nodeType != Element.ELEMENT_NODE:
-        raise "xml: evil batch child %d" % c.nodeType
+        log.panic("xml: evil batch child %d" % c.nodeType)
       if c.nodeName == "src-rpm":
         self.src_rpm = text(c)
       elif c.nodeName == "spec":
@@ -142,7 +145,7 @@ class Batch:
       elif c.nodeName == "without":
         self.bconds_without.append(text(c))
       else:
-        raise "xml: evil batch child (%s)" % c.nodeName
+        log.panic("xml: evil batch child (%s)" % c.nodeName)
  
   def is_done(self):
     ok = 1
@@ -222,15 +225,15 @@ class Notification:
     for c in e.childNodes:
       if is_blank(c): continue
       if c.nodeType != Element.ELEMENT_NODE:
-        raise "xml: evil notification child %d" % c.nodeType
+        log.panic("xml: evil notification child %d" % c.nodeType)
       if c.nodeName == "batch":
         id = attr(c, "id")
         status = attr(c, "status")
         if status != "OK" and status != "FAIL" and status != "SKIP":
-          raise "xml notification: bad status: %s" % self.status
+          log.panic("xml notification: bad status: %s" % self.status)
         self.batches[id] = status
       else:
-        raise "xml: evil notification child (%s)" % c.nodeName
+        log.panic("xml: evil notification child (%s)" % c.nodeName)
 
   def apply_to(self, q):
     for r in q.requests:
@@ -241,7 +244,7 @@ class Notification:
 
 def build_request(e):
   if e.nodeType != Element.ELEMENT_NODE:
-    raise "xml: evil request element"
+    log.panic("xml: evil request element")
   if e.nodeName == "group":
     return Group(e)
   elif e.nodeName == "notification":
@@ -250,7 +253,7 @@ def build_request(e):
     # FIXME
     return Command(e)
   else:
-    raise "xml: evil request <%s>" % e.nodeName
+    log.panic("xml: evil request <%s>" % e.nodeName)
 
 def parse_request(f):
   d = parse(f)
index 92e418e2e172cf38a3f6b01783217303628971d8..4bd76d42ba13836f60f1722ce98171ddeec40ac9 100644 (file)
@@ -67,6 +67,7 @@ def handle_group(r, user):
         return
 
   r.requester = user.get_login()
+  r.requester_email = user.mail_to()
   r.time = time.time()
   log.notice("queued %s from %s" % (r.id, user.get_login()))
   q = B_Queue(path.queue_file)
index a1846eaca01f61869f03167808e11b84d92e986a..f9dd323bb6719150c30f2f2ff40a5a86f02c8f47 100644 (file)
@@ -7,7 +7,6 @@ import urllib
 
 from config import config, init_conf
 from bqueue import B_Queue
-from acl import acl
 import lock
 import util
 import loop
@@ -16,6 +15,7 @@ import status
 import log
 import chroot
 import ftp
+import buildlogs
 import notify
 import build
 import report
@@ -113,6 +113,7 @@ def build_rpm(r, b):
 
 def handle_request(r):
   ftp.init(r)
+  buildlogs.init(r)
   build.build_all(r, build_rpm)
   report.send_report(r)
   ftp.flush()
index 6ad369e0a9a9085b6a07c7aa74bce26bfd72ac53..3941796f68921b398b044571381c7cc71d0f44d0 100644 (file)
@@ -15,11 +15,11 @@ import util
 import loop
 import chroot
 import ftp
+import buildlogs
 import status
 import build
 import report
 
-from acl import acl
 from lock import lock
 from bqueue import B_Queue
 from config import config, init_conf
@@ -106,6 +106,7 @@ def handle_request(r):
   os.mkdir(path.srpms_dir + r.id)
   os.chmod(path.srpms_dir + r.id, 0755)
   ftp.init(r)
+  buildlogs.init(r)
   build.build_all(r, build_srpm)
   report.send_report(r)
   store_binary_request(r)
index 0d2861b6d92f74e7d14c8b6753ccdb82d308da13..ec7162af630509d4d98eb0b9c302df33bff5292b 100644 (file)
@@ -1,7 +1,7 @@
 [all]
 # builder email (in From:)
 email = builder@nowhere
-admin_email = malekith@roke.freak
+admin_email = bldadm@roke.freak
 # list of binary builders
 binary_builders = roke-athlon roke-i686
 # the only src builder
index d424fa366f2296906f0d74240f49f567fe14e3bd..be3599f7ce58b28d43ac545b27cea7c31375352f 100644 (file)
--- a/doc/TODO
+++ b/doc/TODO
   This should be class in requester.py, with kind='command', also look for
   kind checking elsewhere in the code (grep for 'kind.*group')
 
-- store requester email in request, after checking priviliges, so rpm_builder
-  need not have all users in his acl.conf, only srpm_builder user, with priv
-  to sign queue.
-
 - make default configs reasonable
 
 - fix make-request.sh to be more user-friendly and configurable
This page took 0.297638 seconds and 4 git commands to generate.