Add users. Needs tcllib and sqlite3, obviously.
This commit is contained in:
parent
3ee5e56558
commit
d954b0d692
16
scripts/Makefile
Normal file
16
scripts/Makefile
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# cnd Makefile
|
||||||
|
# (C)2005, Dan Ponte
|
||||||
|
# $Amigan: phoned/scripts/Makefile,v 1.1 2005/06/19 05:50:23 dcp1990 Exp $
|
||||||
|
include ../global.mk
|
||||||
|
# basic stuff. we append for a reason.
|
||||||
|
CPPFLAGS+=-I/usr/local/include/tcl8.4
|
||||||
|
CFLAGS+=-g ${CPPFLAGS}
|
||||||
|
LDFLAGS+=-shared
|
||||||
|
# keep these up to date.
|
||||||
|
MAINBIN=terminal.so
|
||||||
|
SRCS=terminal.c
|
||||||
|
OBJS=terminal.o
|
||||||
|
|
||||||
|
include ../main.mk
|
||||||
|
ourclean:
|
||||||
|
|
88
scripts/terminal.c
Normal file
88
scripts/terminal.c
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <termios.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <limits.h> /*For MAX_CANON -- Linux: use <limits.h> instead */
|
||||||
|
#include <tcl.h>
|
||||||
|
|
||||||
|
#define CMD_ARGS (ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
|
||||||
|
|
||||||
|
int TerminalEchoOff CMD_ARGS {
|
||||||
|
struct termios terminal;
|
||||||
|
int fid = fileno (stdout);
|
||||||
|
|
||||||
|
if (objc != 1) {
|
||||||
|
Tcl_WrongNumArgs (interp, 0, NULL, "terminal:echoOff");
|
||||||
|
return TCL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
tcgetattr (fid, &terminal);
|
||||||
|
terminal.c_lflag &= (~ECHO);
|
||||||
|
tcsetattr (fid, TCSANOW, &terminal);
|
||||||
|
|
||||||
|
return TCL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerminalEchoOn CMD_ARGS {
|
||||||
|
struct termios terminal;
|
||||||
|
int fid = fileno (stdout);
|
||||||
|
|
||||||
|
if (objc != 1) {
|
||||||
|
Tcl_WrongNumArgs (interp, 0, NULL, "terminal:echoOn");
|
||||||
|
return TCL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
tcgetattr (fid, &terminal);
|
||||||
|
terminal.c_lflag |= (ECHO);
|
||||||
|
tcsetattr (fid, TCSANOW, &terminal);
|
||||||
|
|
||||||
|
return TCL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerminalCanonicalOff CMD_ARGS {
|
||||||
|
struct termios terminal;
|
||||||
|
int fid = fileno (stdin);
|
||||||
|
|
||||||
|
if (objc != 1) {
|
||||||
|
Tcl_WrongNumArgs (interp, 0, NULL, "terminal:canonicalOff");
|
||||||
|
return TCL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
tcgetattr (fid, &terminal);
|
||||||
|
terminal.c_lflag &= (~ICANON);
|
||||||
|
terminal.c_cc[VTIME] = 0;
|
||||||
|
terminal.c_cc[VMIN] = 1;
|
||||||
|
tcsetattr (fid, TCSANOW, &terminal);
|
||||||
|
|
||||||
|
return TCL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int TerminalCanonicalOn CMD_ARGS {
|
||||||
|
struct termios terminal;
|
||||||
|
int fid = fileno (stdin);
|
||||||
|
|
||||||
|
if (objc != 1) {
|
||||||
|
Tcl_WrongNumArgs (interp, 0, NULL, "terminal:canonicalOn");
|
||||||
|
return TCL_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
tcgetattr (fid, &terminal);
|
||||||
|
terminal.c_lflag |= (ICANON);
|
||||||
|
terminal.c_cc[VTIME] = 0;
|
||||||
|
terminal.c_cc[VMIN] = MAX_CANON;
|
||||||
|
tcsetattr (fid, TCSANOW, &terminal);
|
||||||
|
|
||||||
|
return TCL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Terminal_Init (Tcl_Interp *interp) {
|
||||||
|
#define OBJ_CMD(name,func) Tcl_CreateObjCommand(interp, name, func, (ClientData) NULL, (Tcl_CmdDeleteProc *) NULL)
|
||||||
|
|
||||||
|
OBJ_CMD ("terminal:echoOff", TerminalEchoOff);
|
||||||
|
OBJ_CMD ("terminal:echoOn", TerminalEchoOn);
|
||||||
|
OBJ_CMD ("terminal:canonicalOff", TerminalCanonicalOff);
|
||||||
|
OBJ_CMD ("terminal:canonicalOn", TerminalCanonicalOn);
|
||||||
|
|
||||||
|
#undef OBJ_CMD
|
||||||
|
return TCL_OK;
|
||||||
|
}
|
24
scripts/usermaint.tcl
Executable file
24
scripts/usermaint.tcl
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/local/bin/tclsh8.4
|
||||||
|
if {$argc < 3} {
|
||||||
|
puts stderr "usage: %s dbname command arg1 arg2 ...\ncommands:\nadduser uname - asks for pass, no echo"
|
||||||
|
exit -1
|
||||||
|
}
|
||||||
|
package require md5
|
||||||
|
load ./terminal.so
|
||||||
|
load /usr/local/lib/sqlite/libtclsqlite3.so Sqlite3
|
||||||
|
sqlite db [lindex $argv 0]
|
||||||
|
set cmd [lindex $argv 1]
|
||||||
|
if {[string equal $cmd "adduser"]} {
|
||||||
|
set uname [lindex $argv 2]
|
||||||
|
puts -nonewline "Password: "
|
||||||
|
flush stdout
|
||||||
|
terminal:echoOff
|
||||||
|
set pass [gets stdin]
|
||||||
|
terminal:echoOn
|
||||||
|
puts ""
|
||||||
|
# pkey, login, pass, priv
|
||||||
|
set md5pass [string tolower [md5::md5 -hex $pass]]
|
||||||
|
db eval {INSERT INTO users VALUES(null, $uname, $md5pass, 32)}
|
||||||
|
puts "User added successfully."
|
||||||
|
}
|
||||||
|
db close
|
Loading…
Reference in New Issue
Block a user