예제 #1
0
  def handle_read(self):
    data = self.recv(1024)
    if data == '':
      return
    log.l.LogIt('RSC005', 'D', 'cmd i: %s', (data))
    args = string.split(data)
    self.subsystem = args[0]
    args = args[1:]
    log.l.LogIt('RSC006', 'I', '%s', (str(args)))
    if len(args) == 0:
      return

    #--------------------
    if args[0] == 'version':
      self.senddata = ver.getVersion()

    #--------------------
    elif args[0] == 'stop':
      self.senddata = 'srv terminating'
      self.terminate = 1

    #--------------------
    elif args[0] == 'status':
      self.senddata = 'connections: %d' % (srvgl.srvCnt)

    #--------------------
    elif args[0] == 'trace':
      if len(args) > 2:
        log.l.SetTraceLevel(int(args[1]))
        self.senddata = 'trace level %s' % (args[1])
      else:
        self.senddata = 'trace level %d' % log.l.GetTraceLevel()

    #--------------------
    else:
      self.senddata = 'command: '+args[0]+': not implemented'
예제 #2
0
파일: aprcmd.py 프로젝트: randix/aprsna
base = os.path.dirname(bin)
sys.path.append(os.path.normpath(base + "/../cfg"))
sys.path.append(os.path.normpath(base + "/../share"))

import log, msgpkt, sock, ver
import basecfg

# ---------------------------------------
progname = "aprcmd"
lversion = "1.01"

# ver.showVersion(progname, lversion, rcsid)
ver.setVersion(lversion)

log.l = log.PathFmtLogFile(progname, "n", -1, 1024 * 1024, 30, 1)
log.l.LogIt("CMD001", "I", "start %s", (ver.getVersion()))
log.l.LogIt("CMD002", "I", "%s", (str(sys.argv)))

# -------------------------------------------------
# handle signals
def sig_end(signum, frame):
    log.l.LogIt("CMD003", "I", "signal %s termination", (signum))
    sys.exit(1)


signal.signal(signal.SIGINT, sig_end)
signal.signal(signal.SIGTERM, sig_end)

# -------------------------------------------------
# running on an apr, only deal with this apr!
aprmode = 0
예제 #3
0
파일: srv.py 프로젝트: randix/aprsna
import basecfg
import cmdiptbl, log, sock, ver
import srvgl, srvcmd_hdlr, srvcfg, srvcfg_hdlr

#------------------------------------------------
progname = 'aprsrv'
lversion = '1.00'

ver.showVersion(progname, lversion, rcsid)
print time.asctime(time.localtime(time.time()))
sys.stdout.flush()

log.l = log.PathFmtLogFile(progname, 'n', srvcfg.Keep, srvcfg.MaxSize,
                                          srvcfg.MaxAge, srvcfg.TraceLevel)
log.l.LogIt('RS0001', 'I', 'start %s', (ver.getVersion()))

#------------------------------------------------
# handle signals
def sig_end(signum, frame):
  log.l.LogIt('RS0002', 'I', 'signal %d termination', (signum))
  sys.exit(1)

def sig_child(signum, frame):
  try:
    pid, status = os.waitpid(-1, os.WNOHANG)
  except:
    pass
  log.l.LogIt('RS0003', 'I', 'subprocess termination', ())

signal.signal(signal.SIGHUP, signal.SIG_IGN)
예제 #4
0
파일: cmd_hdlr.py 프로젝트: randix/aprsna
  def handle_read(self):
    data = self.recv(1024)
    if data == '':
      self.handle_close()
      return
    log.l.LogIt('RTC006', 'D', 'cmd i: %s', (data))
    args = string.split(data)
    if len(args) == 0:
      return;
    self.mode = args[0]
    self.target = args[1]
    args = args[2:]
    log.l.LogIt('RTC007', '1', '%s', (str(args)))
    if len(args) == 0:
      return

    #--------------------
    if args[0] == 'close':
      self.senddata.append(util.close(self.mode == 'router', self.target, args[1:]))

    #--------------------
    elif args[0] == 'data':
      if self.mode == 'domain':
        self.senddata.append('command: '+args[0]+': address only to router')
      if self.mode == 'router':
        self.senddata.append(util.data(args[1:]))

    elif args[0] == 'dump':
      if self.mode == 'domain':
        self.senddata.append('command: '+args[0]+': address only to router')
      if self.mode == 'router':
        self.senddata.append(util.dump())

    #--------------------
    elif args[0] == 'event':
      if self.mode == 'domain':
        self.senddata.append('command: '+args[0]+': address only to router')
      if self.mode == 'router':
        self.senddata.append(util.event(args[1:]))

    #--------------------
    elif args[0] == 'fb' or args[0] == 'fallback' or args[0] == 'secondary':
      if len(args) > 1 and args[1] == 'auto':
        auto = 1
      else:
        auto = 0
      if self.mode == 'domain':
        cfg.domain[self.target]['fallback'] = 1
        self.senddata.append(util.switch_secondary(self.target, auto))
      if self.mode == 'router':
        for i in cfg.domain.keys():
          if cfg.domain[i]['apr'] == cfg.name:
            cfg.domain[i]['fallback'] = 1
            self.senddata.append(i+' '+util.switch_secondary(i, auto))

    #--------------------
    elif args[0] == 'ff' or args[0] == 'fallforward' or args[0] == 'primary':
      if len(args) > 1 and args[1] == 'auto':
        auto = 1
      else:
        auto = 0
      if self.mode == 'domain':
        cfg.domain[self.target]['fallback'] = 0
        self.senddata.append(util.switch_primary(self.target, auto))
      if self.mode == 'router':
        for i in cfg.domain.keys():
          if cfg.domain[i]['apr'] == cfg.name:
            cfg.domain[i]['fallback'] = 0
            self.senddata.append(i+' '+util.switch_primary(i, auto))

    #--------------------
    elif args[0] == 'pvc':
      if self.mode == 'domain':
        self.senddata.append('command: '+args[0]+': address only to router')
      if self.mode == 'router':
        self.senddata.append(util.pvc(args[1:]))

    #--------------------
    elif args[0] == 'refresh':
      evt_hdlr.refresh()
      self.senddata.append('status refreshed')

    #--------------------
    elif args[0] == 'set':
      self.senddata = util.set(self.mode == 'router', self.target, args[1:])

    #--------------------
    elif args[0] == 'sna':
      if self.mode == 'domain':
        self.senddata.append('command: '+args[0]+': address only to router')
      if self.mode == 'router':
        self.senddata.append(util.sna(args[1:]))

    #--------------------
    elif args[0] == 'status':
      if self.mode == 'domain':
        self.senddata.append(util.status(self.target))
      if self.mode == 'router':
        for i in cfg.domain.keys():
          if cfg.domain[i]['apr'] == cfg.name:
            self.senddata.append(i+' '+util.status(i))
      if len(self.senddata) == 0:
        self.senddata.append('not active')

    #--------------------
    elif args[0] == 'stop':
      if self.mode == 'domain':
        self.senddata.append('command: '+args[0]+': address only to router')
      if self.mode == 'router':
        log.l.LogIt('RTC008', 'I', 'command termination', ())
        cfg.stopping = 1
        msg = '%s terminating' % self.target
        self.senddata.append(msg)
        for i in cfg.domain.keys():
          util.closeall(i)

    #--------------------
    elif args[0] == 'trace':
      if self.mode == 'domain':
        self.senddata.append('command: '+args[0]+': address only to router')
      if self.mode == 'router':
        if len(args) > 1:
          log.l.SetTraceLevel(int(args[1]))
          self.senddata.append('trace level %s' % (args[1]))
          log.l.LogIt('RTC009', 'I', 'command trace %s', (args[1]))
        else:
          level = log.l.GetTraceLevel()
          self.senddata.append('trace level %d' % (level))
          log.l.LogIt('RTC010', 'I', 'command get trace: %d', (level))

    #--------------------
    elif args[0] == 'version':
      msg = ver.getVersion()
      if cfg.snasrv_version != '':
        msg = msg + ' snasrv: ' + cfg.snasrv_version
      self.senddata.append(msg)

    #--------------------
    else:
      self.senddata.append('command: '+args[0]+': not implemented')
예제 #5
0
파일: ctrl.py 프로젝트: randix/aprsna
  def handle_read(self):
    data = self.recv(1024)
    if data == '':
      self.handle_close()
      return
    log.l.LogIt('CTL011', 'D', 'cmd i: %s', (data))
    args = string.split(data)
    if len(args) == 0:
      return
    log.l.LogIt('CTL012', '1', '%s', (str(args)))

    #--------------------
    if args[0] == 'poweroff':
      global cmdobj, poweroff
      if os.getuid() != 0 and os.geteuid() != 0:
        self.senddata = 'not authorized to power off'
        log.l.LogIt('CTL013', 'I', 'not authorized to poweroff', ())
        return
      self.senddata = '%s powering off' % name
      log.l.LogIt('CTL014', 'I', 'command poweroff', ())
      poweroff = 1
      cmdobj.handle_close()
      cmdobj = None

    #--------------------
    elif args[0] == 'reboot':
      global cmdobj, reboot
      if os.getuid() != 0 and os.geteuid() != 0:
        self.senddata = 'not authorized to reboot'
        log.l.LogIt('CTL015', 'I', 'not authorized to reboot', ())
        return
      self.senddata = '%s rebooting' % name
      log.l.LogIt('CTL016', 'I', 'command reboot', ())
      reboot = 1
      cmdobj.handle_close()
      cmdobj = None

    #--------------------
    elif args[0] == 'stop':
      global cmdobj
      self.senddata = '%s ctrl terminating' % name
      log.l.LogIt('CTL017', 'I', 'command termination', ())
      cmdobj.handle_close()
      cmdobj = None

    #--------------------
    elif args[0] == 'config':
      global hwaddr, interface, hostname
      self.senddata = '%s %s %s %s' % (
                             hostname, interface, inetaddr, hwaddr)

    #--------------------
    elif args[0] == 'next':
      global hwaddr, interface
      f = open('/etc/rc.config', 'r')
      lines = f.readlines()
      f.close()
      for l in lines:
        if re.search('^IFCONFIG_0', l):
          break
      t = string.split(l)
      nip = string.split(t[0], '"')[1]

      f = open('/etc/HOSTNAME', 'r')
      nhostname = string.split(f.readline())[0]
      f.close()

      self.senddata = '%s %s %s %s' % (
                             nhostname, interface, nip, hwaddr)

    #--------------------
    elif args[0] == 'new':
      if len(args) != 2:
        self.senddata = 'new: invalid format'
        log.l.LogIt('CTL019', 'I', 'new: invalid format', ())
        return
      nhostname = args[1]
      nip = socket.gethostbyname(nhostname)
      #-------------
      # edit /etc/rc.config: IPADDR, IFCONFIG, FQHOSTNAME
      try:
        rc = open('/etc/rc.config', 'r')
        config = rc.readlines()
        rc.close()
        rc = open('/etc/rc.config.new', 'w')
        for l in config:
          if re.search('^IPADDR_0="', l):
            l = 'IPADDR_0="%s"\n' % nip
          if re.search('^IFCONFIG_0="', l):
            w = string.split(l)
            l = 'IFCONFIG_0="'+nip
            for i in range(1, len(w)):
              l = l + ' ' + w[i]
            l = l + '\n'
          if re.search('^FQHOSTNAME="', l):
            l = 'FQHOSTNAME="%s"\n' % nhostname
          rc.write(l)
        rc.close()
        os.rename('/etc/rc.config', '/etc/rc.config.old')
        os.rename('/etc/rc.config.new', '/etc/rc.config')
        log.l.LogIt('CTL020', 'I', 'update /etc/rc.config', ())
      except:
        log.l.LogIt('CTL021', 'E', 'cannot update /etc/rc.config', ())
        self.senddata = 'cannot update /etc/rc.config'
        return
      #-------------
      # edit /etc/HOSTNAME
      try:
        f = open('/etc/HOSTNAME', 'w')
        f.write('%s\n' % nhostname)
        f.close()
      except:
        pass              

      #-------------
      self.senddata = 'next start: %s' % (args[1])

    #--------------------
    elif args[0] == 'version':
      self.senddata = ver.getVersion()

    #--------------------
    else:
      self.senddata = 'command: '+args[0]+': not implemented'
예제 #6
0
파일: aprscmd.py 프로젝트: randix/aprsna
base = os.path.dirname(bin)
sys.path.append(os.path.normpath(base + '/../cfg'))
sys.path.append(os.path.normpath(base + '/../share'))

import log, msgpkt, sock, ver
import basecfg

#---------------------------------------
progname = 'aprscmd'
lversion = '1.00'

#ver.showVersion(progname, lversion, rcsid)
ver.setVersion(lversion)

log.l = log.PathFmtLogFile(progname, 'n', -1, 1024*1024, 30, -1)
log.l.LogIt('SCMD01', 'I', 'start %s', (ver.getVersion()))
log.l.LogIt('SCMD02', 'I', '%s', (str(sys.argv)))

#-------------------------------------------------
# handle signals
def sig_end(signum, frame):
  log.l.LogIt('SCMD03', 'I', 'signal %s termination', (signum))
  sys.exit(1)

signal.signal(signal.SIGINT, sig_end)
signal.signal(signal.SIGTERM, sig_end)

#-------------------------------------------------
def usage(exit_val):
  print """
usage: aprscmd {Adressing} {Command}