Difference between revisions of "Xs-rpmlint-2012-11-19-output"

From CDOT Wiki
Jump to: navigation, search
Line 17: Line 17:
  
 
1 packages and 0 specfiles checked; 1 errors, 3 warnings.
 
1 packages and 0 specfiles checked; 1 errors, 3 warnings.
 +
 +
 +
 +
The backup-available.py file is in "server" directory:
 +
$ ls -ld server
 +
drwxr-xr-x. 2 zyu26 zyu26 4096 Feb 10  2012 server
 +
ls -l server
 +
total 40
 +
-rw-r--r--. 1 zyu26 zyu26  451 Feb 10  2012 apache-ds-backup.conf
 +
-rw-r--r--. 1 zyu26 zyu26 2144 Feb 10  2012 backup-available.py
 +
-rw-r--r--. 1 zyu26 zyu26  253 Feb 10  2012 cron-ds-backup-server.conf
 +
-rwxr-xr-x. 1 zyu26 zyu26  322 Feb 10  2012 ds-backup.setup.sh
 +
-rwxr-xr-x. 1 zyu26 zyu26 6595 Feb 10  2012 ds-cleanup.py
 +
-rwxr-xr-x. 1 zyu26 zyu26 1312 Feb 10  2012 ds-cleanup.sh
 +
-rwxr-xr-x. 1 zyu26 zyu26 3650 Feb 10  2012 ds-postprocess.py
 +
-rw-r--r--. 1 zyu26 zyu26  394 Feb 10  2012 incron-ds-backup.comments
 +
-rw-r--r--. 1 zyu26 zyu26  84 Feb 10  2012 incron-ds-backup.conf
 +
 +
$ cat backup-available.py
 +
# this is not a cgi script
 +
# will only work as a mod_python handler
 +
 +
from mod_python import apache
 +
import os
 +
import re
 +
import pwd
 +
import random
 +
 +
def handler(req):
 +
 +
    recentclientsdir = '/var/lib/ds-backup/recentclients'
 +
    basehomedir = '/library/users'
 +
 +
    req.content_type= 'text/plain'
 +
 +
    # max 5% loadavg
 +
    if (os.getloadavg()[0] > 5):
 +
        return apache.HTTP_SERVICE_UNAVAILABLE
 +
 +
    # we need at least a few blocks...
 +
    libstat = os.statvfs(basehomedir);
 +
    usedblockspc = 1 - float(libstat[4])/libstat[2]
 +
    usedfnodespc = 1 - float(libstat[7])/libstat[5]
 +
    if (usedblockspc > 0.9 or usedfnodespc > 0.9):
 +
        return apache.HTTP_SERVICE_UNAVAILABLE
 +
 +
    # Limit concurrent rsync clients
 +
    # We touch a file with the client identifier
 +
    # every time we reply with a 200 OK. So
 +
    # we can check for recent "OKs".
 +
    # (clients that retry the rsync transfer won't
 +
    #  re-request this url, anyway.)
 +
    clientcount = os.system('find ' + recentclientsdir +
 +
                            ' -mmin -5 -type f | wc -l');
 +
    if (clientcount > 10 ):
 +
        return apache.HTTP_SERVICE_UNAVAILABLE
 +
 +
    # Read the XO SN
 +
    req.add_common_vars()
 +
    pathinfo = req.subprocess_env['PATH_INFO']
 +
    m = re.match('/available/(\w+)$', pathinfo)
 +
    if (m):
 +
        # req.log_error(clientid)
 +
        clientid = m.group(1)
 +
    else:
 +
        # We don't like your SN
 +
        return apache.HTTP_FORBIDDEN
 +
 
 +
    # Have we got a user acct for the user?
 +
    try:
 +
        homedir = pwd.getpwnam(clientid)[5]
 +
    except KeyError:
 +
        return apache.HTTP_FORBIDDEN
 +
 +
    # check the homedir is in the right place
 +
    m = re.match(basehomedir, homedir)
 +
    if (not m):
 +
        return apache.HTTP_FORBIDDEN
 +
 +
    #return apache.HTTP_UNAUTHORIZED
 +
    #return apache.HTTP_FORBIDDEN
 +
    #return apache.HTTP_VERSION_NOT_SUPPORTED
 +
    #
 +
    req.write('')
 +
 +
    os.system('touch ' + recentclientsdir + '/' + clientid)
 +
    # TODO: 1 in 10, cleanup recentclients dir
 +
    if (random.randint(0,10) == 1):
 +
        os.system('find ' + recentclientsdir + ' -type f -mmin +10 -print0 | xargs -0 -n 100 --no-run-if-empty rm' )
 +
    return apache.OK

Revision as of 19:01, 22 November 2012

[zyu26@localhost SPECS]$ rpmlint -i ~/rpmbuild/RPMS/noarch/ds-backup-server-0.11.5.g536d1d6-3.fc17.noarch.rpm

ds-backup-server.noarch: E: script-without-shebang /var/www/ds-backup/backup-available.py This text file has executable bits set or is located in a path dedicated for executables, but lacks a shebang and cannot thus be executed. If the file is meant to be an executable script, add the shebang, otherwise remove the executable bits or move the file elsewhere.

ds-backup-server.noarch: W: no-manual-page-for-binary ds-postprocess.py Each executable in standard binary directories should have a man page.

ds-backup-server.noarch: W: no-manual-page-for-binary ds-cleanup.sh Each executable in standard binary directories should have a man page.

ds-backup-server.noarch: W: no-manual-page-for-binary ds-cleanup.py Each executable in standard binary directories should have a man page.

1 packages and 0 specfiles checked; 1 errors, 3 warnings.


The backup-available.py file is in "server" directory: $ ls -ld server drwxr-xr-x. 2 zyu26 zyu26 4096 Feb 10 2012 server ls -l server total 40 -rw-r--r--. 1 zyu26 zyu26 451 Feb 10 2012 apache-ds-backup.conf -rw-r--r--. 1 zyu26 zyu26 2144 Feb 10 2012 backup-available.py -rw-r--r--. 1 zyu26 zyu26 253 Feb 10 2012 cron-ds-backup-server.conf -rwxr-xr-x. 1 zyu26 zyu26 322 Feb 10 2012 ds-backup.setup.sh -rwxr-xr-x. 1 zyu26 zyu26 6595 Feb 10 2012 ds-cleanup.py -rwxr-xr-x. 1 zyu26 zyu26 1312 Feb 10 2012 ds-cleanup.sh -rwxr-xr-x. 1 zyu26 zyu26 3650 Feb 10 2012 ds-postprocess.py -rw-r--r--. 1 zyu26 zyu26 394 Feb 10 2012 incron-ds-backup.comments -rw-r--r--. 1 zyu26 zyu26 84 Feb 10 2012 incron-ds-backup.conf

$ cat backup-available.py

  1. this is not a cgi script
  2. will only work as a mod_python handler

from mod_python import apache import os import re import pwd import random

def handler(req):

   recentclientsdir = '/var/lib/ds-backup/recentclients'
   basehomedir = '/library/users'
   req.content_type= 'text/plain'
   # max 5% loadavg
   if (os.getloadavg()[0] > 5):
       return apache.HTTP_SERVICE_UNAVAILABLE
   # we need at least a few blocks...
   libstat = os.statvfs(basehomedir);
   usedblockspc = 1 - float(libstat[4])/libstat[2]
   usedfnodespc = 1 - float(libstat[7])/libstat[5]
   if (usedblockspc > 0.9 or usedfnodespc > 0.9):
       return apache.HTTP_SERVICE_UNAVAILABLE
   # Limit concurrent rsync clients
   # We touch a file with the client identifier
   # every time we reply with a 200 OK. So
   # we can check for recent "OKs".
   # (clients that retry the rsync transfer won't
   #  re-request this url, anyway.)
   clientcount = os.system('find ' + recentclientsdir +
                           ' -mmin -5 -type f | wc -l');
   if (clientcount > 10 ):
       return apache.HTTP_SERVICE_UNAVAILABLE
   # Read the XO SN
   req.add_common_vars()
   pathinfo = req.subprocess_env['PATH_INFO']
   m = re.match('/available/(\w+)$', pathinfo)
   if (m):
       # req.log_error(clientid)
       clientid = m.group(1)
   else:
       # We don't like your SN
       return apache.HTTP_FORBIDDEN
  
   # Have we got a user acct for the user?
   try:
       homedir = pwd.getpwnam(clientid)[5]
   except KeyError:
       return apache.HTTP_FORBIDDEN
   # check the homedir is in the right place
   m = re.match(basehomedir, homedir)
   if (not m):
       return apache.HTTP_FORBIDDEN
   #return apache.HTTP_UNAUTHORIZED
   #return apache.HTTP_FORBIDDEN
   #return apache.HTTP_VERSION_NOT_SUPPORTED
   #
   req.write()
   os.system('touch ' + recentclientsdir + '/' + clientid)
   # TODO: 1 in 10, cleanup recentclients dir
   if (random.randint(0,10) == 1):
       os.system('find ' + recentclientsdir + ' -type f -mmin +10 -print0 | xargs -0 -n 100 --no-run-if-empty rm' )
   return apache.OK