107 lines
2.5 KiB
Awk
107 lines
2.5 KiB
Awk
#!/bin/awk -f
|
|
|
|
################################################################################
|
|
# Database Import Script for Auth Redux Mod
|
|
# ------------------------------------------
|
|
# This script will convert the specified 'auth.txt' file into a database format
|
|
# required by the Auth Redux Mod. The output file will be generated in the same
|
|
# world directory as the original 'auth.txt' file (which will be unchanged).
|
|
#
|
|
# Setting the mode to 'install' will automatically install the required journal
|
|
# and ruleset files into the world directory as well.
|
|
#
|
|
# EXAMPLE:
|
|
# awk -f convert.awk -v mode=convert ~/.minetest/worlds/world/auth.txt
|
|
################################################################################
|
|
|
|
function error( msg ) {
|
|
skipped++;
|
|
print msg " at line " NR " in " FILENAME ".";
|
|
}
|
|
|
|
BEGIN {
|
|
FS = ":";
|
|
OFS = ":";
|
|
checked = 0;
|
|
skipped = 0;
|
|
|
|
db_file = "auth.db";
|
|
journal_file = "auth.dbx";
|
|
ruleset_file = "greenlist.mt";
|
|
|
|
# determine output file name from arguments
|
|
|
|
path = ARGV[ 1 ]
|
|
if( sub( /[-_A-Za-z0-9]+\.txt$/, "", path ) == 0 ) {
|
|
# sanity check for nonstandard input file
|
|
path = "";
|
|
}
|
|
|
|
# install required journal and ruleset files
|
|
|
|
if( mode == "install" ) {
|
|
print "Installing the required journal and ruleset files...";
|
|
print "" > path journal_file
|
|
print "pass now" > path ruleset_file
|
|
}
|
|
else if( mode != "convert" ) {
|
|
print "Unknown argument, defaulting to convert mode.";
|
|
}
|
|
|
|
# set default values for new database fields
|
|
|
|
approved_addrs = "";
|
|
oldlogin = -1;
|
|
lifetime = 0;
|
|
total_failures = 0;
|
|
total_attempts = 0;
|
|
total_sessions = 0;
|
|
|
|
# print database headline to the output file
|
|
|
|
print "Converting " ARGV[ 1 ] "...";
|
|
print "auth_rx/2.1 @0" > path db_file;
|
|
}
|
|
|
|
NF != 4 {
|
|
error( "Malformed record" );
|
|
next;
|
|
}
|
|
|
|
{
|
|
username = $1;
|
|
password = $2;
|
|
assigned_privs = $3;
|
|
newlogin = $4;
|
|
|
|
if( !match( username, "^[a-zA-Z0-9_-]+$" ) ) {
|
|
error( "Invalid username field" );
|
|
next;
|
|
}
|
|
if( !match( newlogin, "^[0-9]+$" ) && newlogin != -1 ) {
|
|
error( "Invalid last_login field" );
|
|
next;
|
|
}
|
|
|
|
# Database File Format
|
|
# --------------------
|
|
# username
|
|
# password
|
|
# oldlogin
|
|
# newlogin
|
|
# lifetime
|
|
# total_sessions
|
|
# total_attempts
|
|
# total_failures
|
|
# approved_addrs
|
|
# assigned_privs
|
|
|
|
print username, password, oldlogin, newlogin, lifetime, total_sessions, total_attempts, total_failures, approved_addrs, assigned_privs > path db_file;
|
|
|
|
checked++;
|
|
}
|
|
|
|
END {
|
|
print "Done! " checked " of " ( checked + skipped ) " total records were imported to " db_file " (" skipped " records skipped)."
|
|
}
|