First commit
This commit is contained in:
parent
5ce1c5d455
commit
c3b1ab09a6
|
@ -0,0 +1,4 @@
|
||||||
|
*.pyc
|
||||||
|
*.db
|
||||||
|
.env
|
||||||
|
*.log
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
mmmmm mmmm m"" m"" m
|
||||||
|
# # m m mmmmm mmmmm m" "m mm#mm mm#mm #
|
||||||
|
#mmmm" # # m" m" # # # # #
|
||||||
|
# # # # m" m" # # # # "
|
||||||
|
#mmmm" "mm"# #mmmm #mmmm #mm# # # #
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
m m ""# m
|
||||||
|
# # # mmm # mmm mmm mmmmm mmm #
|
||||||
|
" #"# # #" # # #" " #" "# # # # #" # #
|
||||||
|
## ##" #"""" # # # # # # # #"""" "
|
||||||
|
# # "#mm" "mm "#mm" "#m#" # # # "#mm" #
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Settings for the neofinger program itself
|
||||||
|
NF_BASEDIR="."
|
||||||
|
NF_DBNAME="usermap.db"
|
||||||
|
NF_LOGFILE="query.log"
|
||||||
|
|
||||||
|
# Settings for uscpi-tcp
|
||||||
|
NF_PREPEND="sudo"
|
||||||
|
# these must be numaric
|
||||||
|
NF_RUNAS=`id`
|
||||||
|
NF_GROUP=`id -g`
|
||||||
|
|
||||||
|
NF_PORT="79"
|
|
@ -0,0 +1,23 @@
|
||||||
|
import sqlite3
|
||||||
|
import os
|
||||||
|
from settings import *
|
||||||
|
|
||||||
|
schema = open("schema.sql").read()
|
||||||
|
banner1 = open("banner1").read()
|
||||||
|
banner = open("banner").read()
|
||||||
|
os.chdir(BASEDIR)
|
||||||
|
|
||||||
|
db = sqlite3.connect(DBNAME)
|
||||||
|
c = db.cursor()
|
||||||
|
c.execute(schema)
|
||||||
|
db.commit()
|
||||||
|
|
||||||
|
uname = os.getenv("USER")
|
||||||
|
|
||||||
|
sqls = "INSERT INTO lusers (unix_name, type, data) VALUES (?,?,?)"
|
||||||
|
|
||||||
|
c.execute(sqls, (uname, 255, "Created this foolishness"))
|
||||||
|
c.execute(sqls, ("__b1__", 11, banner1))
|
||||||
|
c.execute(sqls, ('__b__', 11, banner))
|
||||||
|
db.commit()
|
||||||
|
db.close()
|
|
@ -0,0 +1,89 @@
|
||||||
|
#!/usr/bin/python3
|
||||||
|
# Note We're doing this using uscpi-tcp for inital testing
|
||||||
|
# We'll add the socket stuff later
|
||||||
|
import sqlite3
|
||||||
|
import os
|
||||||
|
import random
|
||||||
|
import pickle
|
||||||
|
import sys
|
||||||
|
import logging
|
||||||
|
import subprocess
|
||||||
|
from settings import *
|
||||||
|
DYN_TYPE = 76
|
||||||
|
BANNER_TYPE = 11
|
||||||
|
PLAINTEXT_TYPE = 255
|
||||||
|
CRLF = '\r\n'
|
||||||
|
|
||||||
|
|
||||||
|
def eat_pickle(sP):
|
||||||
|
|
||||||
|
cmd = pickle.loads(sP)
|
||||||
|
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
||||||
|
return p.stdout.read().decode("ascii")
|
||||||
|
|
||||||
|
|
||||||
|
os.chdir(BASEDIR)
|
||||||
|
dbcon = None
|
||||||
|
try:
|
||||||
|
dbcon = sqlite3.connect(DBNAME)
|
||||||
|
except Exception as e:
|
||||||
|
sys.stdout.write(str(e))
|
||||||
|
|
||||||
|
|
||||||
|
def banner_query():
|
||||||
|
|
||||||
|
from random import choice
|
||||||
|
sqls = "SELECT data FROM lusers WHERE type=?"
|
||||||
|
cur = dbcon.cursor()
|
||||||
|
cur.execute(sqls, [BANNER_TYPE])
|
||||||
|
bList = cur.fetchall()
|
||||||
|
b = choice(bList)
|
||||||
|
return b[0] + CRLF
|
||||||
|
|
||||||
|
def parse_and_query(uname):
|
||||||
|
|
||||||
|
rv = "No such entity\r\n"
|
||||||
|
if uname == '':
|
||||||
|
banner_query()
|
||||||
|
else:
|
||||||
|
sqls = "SELECT type, data FROM lusers WHERE unix_name=?"
|
||||||
|
cur = dbcon.cursor()
|
||||||
|
cur.execute(sqls, [uname])
|
||||||
|
data = cur.fetchone()
|
||||||
|
if data:
|
||||||
|
rv = eat_pickle(data[1])+CRLF if int(data[0]
|
||||||
|
) == DYN_TYPE else data[1]+CRLF
|
||||||
|
return rv
|
||||||
|
|
||||||
|
|
||||||
|
def info_query(uname):
|
||||||
|
|
||||||
|
cur = dbcon.cursor()
|
||||||
|
cur.execute("SELECT data FROM lusers WHERE unix_name=?", [uname])
|
||||||
|
data = cur.fetchone()
|
||||||
|
rv = data[0] + CRLF if data else "404 No such entity\r\n"
|
||||||
|
return rv
|
||||||
|
|
||||||
|
|
||||||
|
def send_stdin():
|
||||||
|
return sys.stdin.readline()
|
||||||
|
|
||||||
|
|
||||||
|
recv_query = send_stdin
|
||||||
|
|
||||||
|
|
||||||
|
def send_msg(x): return sys.stdout.write(str(x))
|
||||||
|
|
||||||
|
|
||||||
|
logging.basicConfig(filename=LOGFILE, filemode='w',
|
||||||
|
format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S')
|
||||||
|
line = recv_query()
|
||||||
|
if line == "\r\n" or line == "\n":
|
||||||
|
logging.warning("Query was blank sending banner")
|
||||||
|
send_msg(banner_query())
|
||||||
|
else:
|
||||||
|
resp = parse_and_query(line.strip(CRLF))
|
||||||
|
logging.warning("Query was %s sent %s", line.strip(
|
||||||
|
CRLF), str(resp).strip(CRLF))
|
||||||
|
send_msg(resp)
|
||||||
|
sys.exit(0)
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
. .env
|
||||||
|
$NF_PREPEND tcpserver -v -u $NF_RUNAS -g $NF_GROUP 0 $NF_PORT $NF_BASEDIR/neofinger.py
|
|
@ -0,0 +1,7 @@
|
||||||
|
CREATE TABLE lusers (
|
||||||
|
uid INTEGER PRIMARY KEY NOT NULL,
|
||||||
|
type INTEGER DEFAULT 255,
|
||||||
|
unix_name VARCHAR(32) NOT NULL UNIQUE,
|
||||||
|
data BLOB DEFAULT 'their a really nice person'
|
||||||
|
);
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
load_dotenv()
|
||||||
|
LOGFILE = os.getenv("NF_LOGFILE")
|
||||||
|
BASEDIR = os.getenv("NF_BASEDIR")
|
||||||
|
DBNAME = os.getenv("NF_DBNAME")
|
Loading…
Reference in New Issue