├── AUTHORS ├── COPYING ├── ChangeLog ├── DATA_STRUCTURES ├── FAQ ├── INSTALL ├── MANUAL ├── Makefile.am ├── Makefile.in ├── NEWS ├── README ├── aclocal.m4 ├── build_bins.sh ├── compile ├── config.guess ├── config.sub ├── configure ├── configure.ac ├── depcomp ├── freebsd └── scripts │ ├── config │ ├── gb_get.sh │ ├── imdb_get.sh │ ├── killslow.sh │ ├── nuke.sh │ └── tvrage_get.sh ├── ftp-data └── glutil │ ├── db │ ├── sql.tvrage.gz │ └── tvrage.gz │ └── precheck-config │ ├── example │ └── gconf ├── install-sh ├── misc └── glconf-freebsd-x86_64.h ├── missing ├── scripts ├── check_incomplete.sh ├── common ├── config ├── flog │ ├── README │ ├── fsearch.sh │ ├── fsearch.sqlite3 │ ├── mk_index.sh │ ├── stack_exec.sh │ └── un_index.sh ├── gb_get.sh ├── imdb_get.sh ├── imdb_update_dl.sh ├── imdb_update_dl_config ├── killslow.sh ├── killslow_config ├── misc │ └── macros.glutil ├── mk_test.sh ├── nuke.sh ├── precheck_compile.sh ├── script_update.d │ ├── 00main │ ├── 02libs │ ├── 10taskd │ ├── 11taskd_00modules │ ├── 12killslow │ ├── 14imdb │ ├── 16tvrage │ ├── 18siteclean │ ├── 20gamebomb │ ├── 30precheck │ ├── 40misc │ └── 70custom ├── script_update.sh ├── script_update_config ├── site_clean.sh ├── site_clean_config ├── sort_common ├── sort_imdb.sh ├── sort_tvrage.sh ├── taskd │ ├── modules-disabled │ │ └── .placeholder │ ├── modules │ │ ├── 12nuke │ │ ├── 14tvrage │ │ └── 16imdb │ ├── taskc.sh │ ├── taskc_config │ ├── taskd.sh │ ├── taskd_config │ └── taskd_server_config ├── tvrage_get.sh ├── tvrage_update_dl.sh └── tvrage_update_dl_config └── src ├── Makefile.am ├── Makefile.in ├── arg_opts.c ├── arg_opts.h ├── arg_proc.c ├── arg_proc.h ├── base64.c ├── base64.h ├── cfgv.c ├── cfgv.h ├── config.h ├── dirlog.c ├── dirlog.h ├── errno_int.c ├── errno_int.h ├── exec.c ├── exec_t.h ├── exech.c ├── exech.h ├── fp_types.h ├── g_conf.h ├── g_crypto.c ├── g_crypto.h ├── g_help.c ├── g_help.h ├── g_modes.h ├── g_types.h ├── glc.h ├── glutil.h ├── glutil_net.c ├── glutil_net.h ├── gv_off.c ├── gv_off.h ├── hasht.c ├── hasht.h ├── i_math.c ├── i_math.h ├── im_hdr.h ├── init.c ├── l_error.c ├── l_error.h ├── l_sb.h ├── lc_oper.c ├── lc_oper.h ├── log_io.c ├── log_io.h ├── log_op.c ├── log_op.h ├── log_shm.c ├── log_shm.h ├── lref.c ├── lref.h ├── lref_altlog.c ├── lref_altlog.h ├── lref_dirlog.c ├── lref_dirlog.h ├── lref_dupefile.c ├── lref_dupefile.h ├── lref_game.c ├── lref_game.h ├── lref_gconf.c ├── lref_gconf.h ├── lref_gen1.c ├── lref_gen1.h ├── lref_gen2.c ├── lref_gen2.h ├── lref_gen3.c ├── lref_gen3.h ├── lref_gen4.c ├── lref_gen4.h ├── lref_generic.c ├── lref_generic.h ├── lref_glob.c ├── lref_glob.h ├── lref_imdb.c ├── lref_imdb.h ├── lref_imdb_old.c ├── lref_imdb_old.h ├── lref_lastonlog.c ├── lref_lastonlog.h ├── lref_nukelog.c ├── lref_nukelog.h ├── lref_online.c ├── lref_online.h ├── lref_onliners.c ├── lref_onliners.h ├── lref_sconf.c ├── lref_sconf.h ├── lref_tvrage.c ├── lref_tvrage.h ├── m_comp.h ├── m_general.c ├── m_general.h ├── m_lom.c ├── m_lom.h ├── m_string.c ├── m_string.h ├── macros.c ├── macros_t.h ├── main.c ├── mc_glob.h ├── memory.c ├── memory_t.h ├── misc.c ├── misc.h ├── net_cmdproc.c ├── net_cmdproc.h ├── net_dis.c ├── net_dis.h ├── net_fs.c ├── net_fs.h ├── net_fsjproc.c ├── net_fsjproc.h ├── net_ftp.c ├── net_ftp.h ├── net_gfs.c ├── net_gfs.h ├── net_io.c ├── net_io.h ├── net_proto.c ├── net_proto.h ├── omfp.c ├── omfp.h ├── pce ├── pce_config.h ├── pce_init.c ├── pce_misc.c ├── pce_misc.h ├── pce_proc.c ├── pce_proc.h ├── pce_signal.c └── pce_signal.h ├── signal.c ├── signal_t.h ├── sort.c ├── sort_hdr.h ├── str.c ├── str.h ├── t_glob.h ├── taskd.c ├── taskd.h ├── thread.c ├── thread.h ├── time.c ├── timeh.h ├── x_f.c ├── x_f.h ├── xref.c └── xref.h /AUTHORS: -------------------------------------------------------------------------------- 1 | siska, nymfo 2 | -------------------------------------------------------------------------------- /Makefile.am: -------------------------------------------------------------------------------- 1 | SUBDIRS=src 2 | 3 | SCRIPTS_DIST = scripts 4 | GLDATA_DIST = ftp-data 5 | MISC_DIST = misc 6 | 7 | dist-hook: 8 | cp -Rf $(SCRIPTS_DIST) $(distdir)/; \ 9 | chmod 755 $(distdir)/$(SCRIPTS_DIST)/*.sh; \ 10 | cp -Rf $(GLDATA_DIST) $(distdir)/; \ 11 | cp -Rf $(MISC_DIST) $(distdir)/; \ 12 | chmod 755 $(distdir)/$(MISC_DIST)/macros.glutil -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | General purpose glFTPd binary logs utility 2 | 3 | This tool serves as an I/O mechanism between user's scripts and 4 | binary logs or online users data from the shared memory segment. 5 | Additionally, it can traverse a filesystem directory tree much the 6 | same way as it would other sources, honoring all of the the extensive 7 | filtering options available, making it a powerfull filesystem search 8 | application. 9 | 10 | Check /scripts folder in this repo for examples on what can be done 11 | with this tool. This is a C source project, scripts are NOT required 12 | for any part of glutil to function. However, scripts depend on 13 | glutil to read/write binary log/shm/filesystem/config data. 14 | Scripts are NOT maintained and tested on different evironments. 15 | That said, they should work fine on most newer linux environments 16 | and provide scripters with a base for porting to theirown platforms. 17 | 18 | See ./glutil --help for full list of options with short descriptions. 19 | 20 | MAIN FEATURES: 21 | 22 | - Import individual/missing records or rebuild entire dirlog based 23 | on file-system and nukelog data (read below) 24 | - Rebuild existing binary glFTPd logs (see full list below) 25 | using regex/custom filtering methods and sorting 26 | - Display various binary glFTPd logs/online users/config data 27 | (filtered/sorted) using custom formatting and pre-processing 28 | hooks (-print, -execv) 29 | - Execute external tools/scripts for each data record matched, passing 30 | along argument strings converted from binary data to shell (-execv) 31 | - Write to any binary log, using an ASCII formatted text or binary 32 | source 33 | - Calculate CRC32 of files 34 | 35 | INSTALLATION: 36 | 37 | - Unpack and compile: 38 | 39 | git clone https://github.com/nixnodes/glutil.git 40 | cd glutil 41 | cp /glroot/bin/sources/glconf.h src/ 42 | ./configure --prefix=/glroot && make 43 | 44 | Some warnings might pop up (should be safe) 45 | glconf.h (found in /bin/sources) is needed to compile properly, 46 | make sure to put it into 'src/' folder. 47 | 48 | - Install: 49 | 50 | make install 51 | 52 | 53 | SUPPORTED glFTPd BINARY LOGS (with default paths): 54 | 55 | - Directory log (/ftp-data/logs/dirlog) 56 | - Nuke log (/ftp-data/logs/nukelog) 57 | - Dupe file (/ftp-data/logs/dupefile) 58 | - Last-online log (/ftp-data/logs/laston.log) 59 | - Oneliners file (/ftp-data/logs/oneliners.log) 60 | - Online users (shared memory segment) 61 | 62 | glutil specific binary logs: 63 | 64 | - Internet Movie Data Base log (/ftp-data/logs/imdb.log) 65 | - TVRAGE info log (/ftp-data/logs/tv.log) 66 | - Game info log (/ftp-data/logs/game.log) 67 | 68 | 69 | Credits : Bsugar for the original idea, design and beta testing 70 | -------------------------------------------------------------------------------- /build_bins.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | OUT="bin" 3 | INSTALL=true 4 | 5 | #################################################### 6 | 7 | [ -n "${4}" ] && INSTALL="${4}" 8 | 9 | build() 10 | { 11 | make clean || return 2 12 | ./configure ${1} || return 2 13 | make -j2 LDFLAGS="${LDFLAGS} ${2}" || return 2 14 | [ "${INSTALL}" = "true" ] && { 15 | make install || return 2 16 | } 17 | return 0 18 | } 19 | 20 | rm -f "${OUT}"/* 21 | 22 | build "--enable-precheck ${1}" "${3}" || exit 2 23 | build "${1} ${2}" "${3}" || exit 2 24 | build "--enable-gfind ${1}" "${3}" || exit 2 25 | build "--enable-chroot-ownbin ${1} ${2}" "${3}" || exit 2 26 | 27 | exit 0 28 | -------------------------------------------------------------------------------- /freebsd/scripts/config: -------------------------------------------------------------------------------- 1 | # Holds shared script settings 2 | # 3 | INPUT_SKIP="^(.* complete .*|sample|subs|no-nfo|incomplete|covers|cover|proof|cd[0-9]{1,3}|dvd[0-9]{1,3}|nuked\-.*|.* incomplete .*|.* no-nfo .*)$|.*\(no\-sfv\).*" 4 | # 5 | INPUT_CLEAN_REGEX="([\\.\\_\\-\\(\\)]([1-2][0-9]{3,3}|(S[0-9]{1,3}E[0-9]{1,3}|E(P|())[0-9]{1,3}|S[0-9]{1,3}).*)[\\.\\_\\-\\(\\)].*)|([\\.\\_\\-\\(\\)](MACOSX|EUR|Creators[\\.\\_\\-\\(\\)]Edition|PATCH|DATAPACK|GAMEFIX|READ[\\.\\_\\-\\(\\)]NFO|MULTI[0-9]{1,2}|HD|PL|POLISH|RU|RUSSIAN|JAPANESE|SWEDISH|DANISH|GERMAN|ITALIAN|KOREAN|LINUX|ISO|MAC|NFOFIX|DEVELOPERS[\\.\\_\\-\\(\\)]CUT|READNFO|DLC|INCL[\\.\\_\\-\\(\\)]+|v[0-9]|INSTALL|FIX|UPDATE|PROPER|GOTY|MULTI|Crack|DOX|VOBSUBS|SUBPACK|BOXSET|FESTIVAL|(720|1080)[ip]|RERIP|UNRATED|DVDSCR|TC|TS|CAM|EXTENDED|TELESYNC|DVDR|X264|HDTV|SDTV|PDTV|XXX|WORKPRINT|SUBBED|DUBBED|DOCU|THEATRICAL|RETAIL|SUBFIX|NFOFIX|DVDRIP|HDRIP|BRRIP|BDRIP|LIMITED|REPACK|XVID)([\\.\\_\\-\\(\\)]|$).*)|-([A-Z0-9a-z_-]*$)" 6 | # 7 | -------------------------------------------------------------------------------- /freebsd/scripts/gb_get.sh: -------------------------------------------------------------------------------- 1 | #!/usr/local/bin/bash 2 | # DO NOT EDIT THESE LINES 3 | #@MACRO:getscore-f:{m:exe} -x {m:arg1} --silent --dir -exec "{m:spec1} $(basename {arg}) score" 4 | # 5 | ## Retrieves game info using giantbomb API (XML) 6 | # 7 | ## Usage (macro): ./dirupdate -m getscore-f --arg1=/path/to/games 8 | # 9 | ## To use this macro, place script in the same directory (or any subdirectory) where dirupdate is 10 | located 11 | # 12 | CURL="/usr/local/bin/curl" 13 | CURL_FLAGS="--silent" 14 | XMLLINT="/usr/local/bin/xmllint" 15 | 16 | ###########################[ BEGIN OPTIONS ]############################# 17 | # 18 | BURL="http://www.giantbomb.com/" 19 | URL="$BURL""api" 20 | # 21 | ## Get it from giantbomb website (registration required) 22 | API_KEY="" 23 | # 24 | INPUT_CLEAN_REGEX="([\\.\\_\\-\\(\\)](MACOSX|NUKED|EUR|Creators[\\.\\_\\-\\(\\)]Edition|PATCH|DATAPACK|GAMEFIX|READ[\\.\\_\\-\\(\\)]NFO|MULTI[0-9]{1,2}|HD|PL|POLISH|RU|RUSSIAN|JAPANESE|SWEDISH|DANISH|GERMAN|ITALIAN|KOREAN|LINUX|ISO|MAC|NFOFIX|DEVELOPERS[\\.\\_\\-\\(\\)]CUT|READNFO|DLC|INCL[\\.\\_\\-\\(\\)]+|v[0-9]|INSTALL|FIX|UPDATE|PROPER|REPACK|GOTY|MULTI|Crack|DOX)[\\.\\_\\-\\(\\)].*)|(-[A-Z0-9a-z_-]*)$" 25 | # 26 | ############################[ END OPTIONS ]############################## 27 | 28 | QUERY=$(echo $1 | sed -r "s/($INPUT_CLEAN_REGEX)//gI" | sed -r "s/[\\.\\_\\-\\(\\)]/+/g" | sed -r "s/^[+ ]+//"| sed -r "s/[+ ]+$//") 29 | 30 | WHAT=$2 31 | 32 | [ "$WHAT" = "score" ] && FIELD="reviews" 33 | 34 | [ -z "$FIELD" ] && exit 1 35 | [ -z "$QUERY" ] && exit 2 36 | 37 | APIKEY_STR="?api_key=$API_KEY" 38 | 39 | G_ID=$($CURL $CURL_FLAGS "$URL/search/$APIKEY_STR&limit=1&resources=game&query=$QUERY" | $XMLLINT --xpath "string((/response/results//id)[1])" -) 40 | 41 | #echo "$URL/search/$APIKEY_STR&limit=1&resources=game&query=$QUERY" 42 | 43 | [ -z "$G_ID" ] && echo "ERROR: '$QUERY': Failed getting game ID" && exit 1 44 | 45 | RES=$($CURL $CURL_FLAGS $BURL""game/3030-$G_ID/user-reviews/ | grep "" | head -1 | sed 's/.*//' | sed 's/[ ]*stars.*//') 46 | 47 | [ -z "$RES" ] && echo "ERROR: '$QUERY': could not get result '$WHAT' from $BURL""game/3030-$G_ID/user-reviews/" && exit 1 48 | 49 | [ "$WHAT" = "score" ] && { 50 | echo "SCORE: '$QUERY': $RES" 51 | } 52 | 53 | exit 0 54 | -------------------------------------------------------------------------------- /freebsd/scripts/nuke.sh: -------------------------------------------------------------------------------- 1 | #!/usr/local/bin/bash 2 | 3 | glftpddir="/glftpd" 4 | glutil="/glftpd/bin/sources/glutil/glutil" 5 | nukeuser="glftpd" 6 | 7 | release=$1 8 | ratio=$2 9 | reason=$3 10 | nuke="/glftpd/bin/nuker" 11 | config="-r /glftpd/etc/java.conf" 12 | 13 | if [ "$release" == "" ]; then 14 | echo "Type: !nuke " 15 | exit 0 16 | fi 17 | 18 | if [ "$ratio" == "" ]; then 19 | echo "Please enter a ratio. !nuke " 20 | exit 0 21 | fi 22 | 23 | if [ "$reason" == "" ]; then 24 | echo "Please enter a reason. !nuke " 25 | exit 0 26 | fi 27 | 28 | ### No need to edit belowe ### 29 | findrelease=`$glutil -d -v | grep $release | awk '{print $2}' | head -1` 30 | if [ "$findrelease" ] 31 | then 32 | $nuke $config -N $nukeuser -n {$findrelease} $ratio $reason >/dev/null 33 | echo "NUKED: $release ratio: $ratio reason: $reason" 34 | else 35 | echo "$release was not found on site" 36 | fi 37 | -------------------------------------------------------------------------------- /ftp-data/glutil/db/sql.tvrage.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nixnodes/glutil/dda706b74390c51e8e6e04dfc4e159906c665050/ftp-data/glutil/db/sql.tvrage.gz -------------------------------------------------------------------------------- /ftp-data/glutil/db/tvrage.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nixnodes/glutil/dda706b74390c51e8e6e04dfc4e159906c665050/ftp-data/glutil/db/tvrage.gz -------------------------------------------------------------------------------- /ftp-data/glutil/precheck-config/example: -------------------------------------------------------------------------------- 1 | ################################################################# 2 | # 3 | # Sample rule-chain configuration. Chains are applied to 4 | # individual folders defined by 'path' (see below). 5 | # Each path or 'section' must be defined in its own config 6 | # file. 'precheck_compile.sh' in 'scripts/' compiles these 7 | # chains into binary form in order to avoid parsing text from 8 | # configuration files on each fork. 9 | # 10 | ################################################################# 11 | # 12 | # Defines the relative-to-siteroot path to 13 | # which this rule chain applies. This setting 14 | # must match the filename. 15 | # Anything uploaded into 'path' is processed, 16 | # make sure 'r_skip_basedir' in 'gconf' is set 17 | # to filter unwanted directories. 18 | # Do not add trailing or leading / 19 | # 20 | # For example, to define rules for subfolders: 21 | # path='archive/xvid' 22 | # 23 | path=xvid 24 | # 25 | #################################################### 26 | # 27 | # Rule chain starts here; 28 | # 29 | # There are three rule-match types available: 30 | # 31 | # - REGEX matching 32 | # - Integer field relational matching 33 | # - External match (execute some process and use 34 | # its return code) 35 | # 36 | # A rule of any match-type can lookup against/extract 37 | # any data field from imdb/tvrage logs. 38 | # There is no limit on how many rules can exist 39 | # in a chain. 40 | # Take a look inside MANUAL for what fields are 41 | # available for use with these logs. 42 | # 43 | # Format for logs: 44 | # REGEX: 45 | # 46 | # __= 47 | # 48 | # Logical: 49 | # 50 | # ___= 51 | # See below what operators are available. 52 | # 53 | # Exec: 54 | # 55 | # _do_exec= 56 | # 57 | #################################################### 58 | # 59 | # For example, REGEX match against the 'genre' 60 | # field in imdb log (allow only) and define a 61 | # message (msg=) to print in case this rule check 62 | # fails. 63 | # Messages can be formatted with data from the 64 | # respective log and with generic data (MANUAL). 65 | # 66 | msg=Only comedy/action allowed but '{title}' has genres '{genre}' 67 | imdb_allow_genre=Comedy|Action 68 | # 69 | #################################################### 70 | # 71 | # Deny if actors field matched against db lookup 72 | # contains the string 'Steven Seagal' 73 | # 74 | msg=Shame on you for trying to upload {title} 75 | imdb_deny_actors='Steven Seagal' 76 | # 77 | #################################################### 78 | # 79 | # Relational comparison matching example; 80 | # Deny releases under score 5.0: 81 | # 82 | imdb_deny_score_islower=5.0 83 | # 84 | # .. this could also be written as: 85 | # 86 | # imdb_allow_score_ishigherorequal=5.0 87 | # 88 | # Relational operators available are: 89 | # isequal 90 | # isnotequal 91 | # islower 92 | # ishigher 93 | # islowerorqeual 94 | # ishigherorequal 95 | # 96 | # Check DATA_STRUCTURES, any field with I or F flag 97 | # is compatible with logical matching. 98 | # 99 | #################################################### 100 | # 101 | # Deny anything older than year 2000: 102 | # 103 | imdb_deny_year_islower=2000 104 | # 105 | #################################################### 106 | # 107 | # REGEX filter applied to the dir string passed 108 | # from glftpd 109 | # 110 | deny=BluRay|lala 111 | # 112 | # allow=.. (allow-only) 113 | # 114 | #################################################### 115 | # 116 | # Command is executed, if the return status is non-zero, 117 | # the chain terminates and returns the respective code. 118 | # msg= applies, but stdout of the called process is not 119 | # muted; 120 | # 121 | do_exec=/bin/scripts/some-other-precheck.sh 122 | # 123 | #################################################### 124 | -------------------------------------------------------------------------------- /misc/glconf-freebsd-x86_64.h: -------------------------------------------------------------------------------- 1 | /* 2 | * If using FreeBSD 64 bit, replace your glconf.h with this one 3 | */ 4 | 5 | #define GLCONF "/glftpd/etc/glftpd.conf" 6 | 7 | #include 8 | #include 9 | 10 | /* Force structure alignment to 4 bytes (for 64bit support). */ 11 | #pragma pack(push, 4) 12 | 13 | /* 32-bit time values (for 64bit support). */ 14 | typedef int32_t time32_t; 15 | 16 | typedef struct { 17 | int32_t tv_sec; 18 | int32_t tv_usec; 19 | } timeval32_t; 20 | 21 | /* glFTPD's data structures. */ 22 | struct dirlog { 23 | uint16_t status; /* 0 = NEWDIR, 1 = NUKE, 2 = UNNUKE, 3 = DELETED */ 24 | time32_t uptime; /* Creation time since epoch (man 2 time) */ 25 | uint16_t uploader; /* The userid of the creator */ 26 | uint16_t group; /* The groupid of the primary group of the creator */ 27 | uint16_t files; /* The number of files inside the dir */ 28 | uint64_t bytes; /* The number of bytes in the dir */ 29 | char dirname[255]; /* The name of the dir (fullpath) */ 30 | char dummy[8]; /* Unused, kept for compatibility reasons */ 31 | }; 32 | 33 | struct lastonlog { 34 | char uname[24]; /* username */ 35 | char gname[24]; /* users primary group */ 36 | char tagline[64]; /* users tagline */ 37 | time32_t logon; /* users logon time */ 38 | time32_t logoff; /* users logoff time */ 39 | unsigned long upload; /* bytes uploaded */ 40 | unsigned long download; /* bytes downloaded */ 41 | char stats[6]; /* what did the user do ? */ 42 | }; 43 | 44 | struct nukelog { 45 | uint16_t status; /* 0 = NUKED, 1 = UNNUKED */ 46 | time32_t nuketime; /* The nuke time since epoch (man 2 time) */ 47 | char nuker[12]; /* The name of the nuker */ 48 | char unnuker[12]; /* The name of the unnuker */ 49 | char nukee[12]; /* The name of the nukee */ 50 | uint16_t mult; /* The nuke multiplier */ 51 | float bytes; /* The number of bytes nuked */ 52 | char reason[60]; /* The nuke reason */ 53 | char dirname[255]; /* The dirname (fullpath) */ 54 | char dummy[8]; /* Unused, kept for compatibility reasons */ 55 | }; 56 | 57 | struct oneliner { 58 | char uname[24]; /* The user that added the oneliner */ 59 | char gname[24]; /* The primary group of the user who added the oneliner */ 60 | char tagline[64]; /* The tagline of the user who added the oneliner */ 61 | time32_t timestamp; /* The time the message was added (epoch) */ 62 | char message[100]; /* The message (oneliner) */ 63 | }; 64 | 65 | struct dupefile { 66 | char filename[256]; 67 | time32_t timeup; 68 | char uploader[25]; 69 | }; 70 | 71 | struct ONLINE { 72 | char tagline[64]; /* The users tagline */ 73 | char username[24]; /* The username of the user */ 74 | char status[256]; /* The status of the user, idle, RETR, etc */ 75 | int16_t ssl_flag; /* 0 = no ssl, 1 = ssl on control, 2 = ssl on control and data */ 76 | char host[256]; /* The host the user is comming from (with ident) */ 77 | char currentdir[256]; /* The users current dir (fullpath) */ 78 | int32_t groupid; /* The groupid of the users primary group */ 79 | time32_t login_time; /* The login time since the epoch (man 2 time) */ 80 | timeval32_t tstart; /* replacement for last_update. */ 81 | timeval32_t txfer; /* The time of the last succesfull transfer. */ 82 | uint64_t bytes_xfer; /* bytes transferred so far. */ 83 | uint64_t bytes_txfer; /* bytes transferred in the last loop (speed limiting) */ 84 | int32_t procid; /* The processor id of the process */ 85 | }; 86 | 87 | /* Restore default structure alignment for non-critical structures. */ 88 | #pragma pack(pop) 89 | 90 | 91 | -------------------------------------------------------------------------------- /scripts/check_incomplete.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (C) 2013 NixNodes 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # DO NOT EDIT/REMOVE THESE LINES 19 | #@VERSION:01 20 | #@REVISION:04 21 | #@MACRO:incomplete:{exe} -d -execv "{spec1} \{dir\} \{exe\} \{glroot\} {arg1}" --silent 22 | #@MACRO:incomplete-c:{exe} -d -execv "{spec1} \{dir\} \{exe\} \{glroot\} {arg2}" -regex "{arg1}" --silent 23 | # 24 | ## Checks a release for incomplete/corrupt files by comparing SFV data with filesystem 25 | # 26 | ## Usage (manual): /glroot/bin/glutil -d -exec "/glftpd/bin/scripts/check_incomplete.sh '{dir}' '{exe}' '{glroot}'" 27 | # 28 | ## Usage (macro): ./glutil -m incomplete (full dirlog) 29 | ## ./glutil -m incomplete-c -arg1="Unforgettable" (regex filtered dirlog scan) 30 | # 31 | ## To use this macro, place script in the same directory (or any subdirectory) where glutil is located 32 | # 33 | ## See ./glutil --help for more info about options 34 | # 35 | ###########################[ BEGIN OPTIONS ]############################# 36 | # 37 | ## Verbose output 38 | VERBOSE=0 39 | # 40 | ## Optional corruption checking (CRC32 calc & match against .sfv) 41 | CHECK_CORRUPT=0 42 | # 43 | ############################[ END OPTIONS ]############################## 44 | 45 | [ -z "$1" ] && exit 1 46 | [ -z "$2" ] && exit 1 47 | 48 | GLROOT=${3} 49 | 50 | c_dir() { 51 | while read l; do 52 | echo "${l}" | egrep -q '^;' && continue 53 | FFL=$(echo "$l" | awk '{print $1}') 54 | FFT=$(dirname "$1")/$FFL 55 | ! [ -f "${FFT}" ] && { 56 | echo "WARNING: `dirname ${DIR}`: incomplete, missing file: ${FFL}" && continue 57 | } 58 | 59 | if [ ${CHECK_CORRUPT} -gt 0 ]; then 60 | FCRC=`echo "$l" | tr -d '\n' | tr -d '\r' | rev | awk '{print $1}' | rev | tr '[:lower:]' '[:upper:]'` 61 | CRC32=`$EXE --crc32 "${FFT}" | tr -d '\n'` 62 | 63 | ! test ${CRC32} = ${FCRC} && { 64 | echo "WARNING: `dirname "${DIR}"`/${FFL} CRC32: ${CRC32}, should be: ${FCRC}" 65 | continue 66 | } 67 | 68 | [ ${VERBOSE} -gt 0 ] && echo "OK: ${FFT}: ${FCRC}" 69 | else 70 | [ ${VERBOSE} -gt 0 ] && echo "OK: ${FFT}" 71 | fi 72 | done < "$1" 73 | } 74 | 75 | [ "$4" = "cdir" ] && { 76 | DIR="${1}"; EXE=${2} 77 | [ -n "$5" ] && VERBOSE=1 78 | echo "NOTICE: processing ${DIR}" 79 | c_dir "${DIR}" 80 | exit 0 81 | } 82 | 83 | 84 | DIR="${GLROOT}${1}" 85 | [ -n "${4}" ] && VERBOSE=1 86 | 87 | ! [ -d "${DIR}" ] && exit 1 88 | 89 | ${2} -x "${DIR}" -regexi "\.sfv$" -execv "${0} {path} ${2} ${3} cdir ${4}" --silent -R 90 | 91 | exit 0 92 | -------------------------------------------------------------------------------- /scripts/common: -------------------------------------------------------------------------------- 1 | #@VERSION:00 2 | #@REVISION:05 3 | 4 | _lock() { flock -$1 ${2}; } 5 | _clear_lock() { _lock u ${1}; _lock xn ${1}; rm -f "${2}"; } 6 | _prepare_lock() { eval "exec ${1}>\"${2}\""; } 7 | 8 | exlock_now() { _lock xn ${1}; } # obtain an exclusive lock immediately or fail 9 | exlock() { _lock x ${1}; } # obtain an exclusive lock 10 | shlock() { _lock s ${1}; } # obtain a shared lock 11 | unlock() { _lock u ${1}; } # drop a lock 12 | 13 | OUT_PRINT=1 14 | 15 | print_str() 16 | { 17 | [ ${OUT_PRINT} -eq 1 ] && { 18 | echo "${@}" 19 | } 20 | } 21 | 22 | ctime() 23 | { 24 | date +%s 25 | } 26 | 27 | bc_dcalc() { 28 | echo "x=${1}; if(x<1) print 0; x" | bc; 29 | } 30 | 31 | get_trap() 32 | { 33 | echo "$(trap -p)" | egrep "${1}$" | sed -r "s/^trap \-\- '//" | sed -r "s/' ${1}$//" 34 | } 35 | 36 | validate_ipv4() 37 | { 38 | echo "${1}" | egrep -q '^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})((:)[0-9]{1,6}|$)$' 39 | return $? 40 | } 41 | 42 | LOCK_BASEPATH="${GLROOT}/var/lock" 43 | CT_BARE=`basename "${0}" | sed -r 's/\.[a-zA-Z0-9]+$//'` 44 | 45 | mk_lockdir() 46 | { 47 | [ -d "${LOCK_BASEPATH}/lock-${1}" ] || { 48 | mkdir -p "${LOCK_BASEPATH}/${1}" 49 | chmod -f 777 "${LOCK_BASEPATH}" 50 | chmod -f 777 "${LOCK_BASEPATH}/${1}" 51 | } 52 | } 53 | 54 | stack_trap() 55 | { 56 | p_trap="$(get_trap ${2})" 57 | [ -n "${p_trap}" ] && p_trap="${p_trap}; " 58 | trap "${p_trap}${1}" ${2} 59 | } 60 | 61 | try_lock() 62 | { 63 | mk_lockdir ${2} 64 | CT_F_LOCKFILE="${LOCK_BASEPATH}/${2}/${3}.lock" 65 | 66 | _prepare_lock ${1} "${CT_F_LOCKFILE}" 67 | exlock_now ${1} || { 68 | exit 1 69 | } 70 | 71 | stack_trap "_clear_lock ${1} ${CT_F_LOCKFILE}" EXIT 72 | } 73 | 74 | try_lock_r() 75 | { 76 | mk_lockdir ${2} 77 | CT_F_LOCKFILE="${LOCK_BASEPATH}/${2}/${3}.lock" 78 | 79 | tl_to=${4} 80 | i=0 81 | 82 | while [ ${i} -lt ${tl_to} ]; do 83 | _prepare_lock ${1} "${CT_F_LOCKFILE}" 84 | 85 | exlock_now ${1} && { 86 | stack_trap "_clear_lock ${1} ${CT_F_LOCKFILE}" EXIT 87 | return 0 88 | } 89 | i=`expr ${i} + 1` 90 | sleep 1 91 | done 92 | 93 | echo "${5}" 94 | 95 | exit 0 96 | } 97 | 98 | controls_unlock() 99 | { 100 | CT_F_LOCKFILE="${LOCK_BASEPATH}/${2}/${3}.lock" 101 | _clear_lock ${1} "${CT_F_LOCKFILE}"; 102 | } 103 | -------------------------------------------------------------------------------- /scripts/config: -------------------------------------------------------------------------------- 1 | 2 | # Holds shared script settings 3 | # 4 | INPUT_SKIP="^(.* complete .*|sample|subs|no-nfo|incomplete|covers|cover|proof|cd[0-9]{1,3}|dvd[0-9]{1,3}|nuked\-.*|.* incomplete .*|.* no-nfo .*)$|.*\(no\-sfv\).*" 5 | # 6 | INPUT_CLEAN_REGEX="([-_\(\)\.\ \+](([1][98][0-9]{2,2}|[2][0][0-9]{2,2})|(S[0-9]{1,3}(((E|D(VD|()))[0-9]{1,3}|())(E|D(VD|()))[0-9]{1,3}((E|D(VD|()))[0-9]{1,3}|()))|E(P|())[0-9]{1,3}|S[0-9]{1,3}|[0-9]{1,3}[xX][0-9]{1,3}))([-_\(\)\.\ \+]|$).*)|([-_\(\)\.\ \+](MACOSX|B[Ll][Uu][R][Aa][Yy]|EUR|Creators[-_\(\)\.\ \+]Edition|PATCH|DATAPACK|INTERNAL|FINNISH|GAMEFIX|READ[-_\(\)\.\ \+]NFO|MULTI[0-9]{1,2}|HD|DOKU|PL|SI|POLISH|RU|RUSSIAN|JAPANESE|SWEDISH|DUTCH|DANISH|GERMAN|ITALIAN|KOREAN|LINUX|ISO|MAC|NFOFIX|DEVELOPERS[-_\(\)\.\ \+]CUT|READNFO|DLC|INCL[-_\(\)\.\ \+]+|v[0-9]|INSTALL|FIX|UPDATE|PROPER|GOTY|MULTI|Crack|DOX|FRENCH|VOBSUBS|SUBPACK|BOXSET|WS|FESTIVAL|(720|1080)(i|p)|RERIP|UNRATED|DVDSCR|TC|TS|CAM|EXTENDED|TELESYNC|DVDR|X264|HDTV([Rr][Ii][Pp]|())|SDTV|PDTV|XXX|WORKPRINT|DOC|(NL|())SUBBED|DUBBED|DOCU|THEATR[Ii]CAL|RETAIL|SUBFIX|NFOFIX|DVDRIP|HDRIP|BRRIP|BDRIP|LIMITED|REPACK|DC|XVID|UNCUT|NORD[iI]C|WEB[rR][iI][pP]|FLEM[iI]SH)([-_\(\)\.\ \+]|$).*)|-([_A-Za-z0-9]*$)" 7 | # -------------------------------------------------------------------------------- /scripts/flog/README: -------------------------------------------------------------------------------- 1 | These scripts are used for building/searching a special 2 | binary log which holds file information. The log may be 3 | built passively (see 'filelog-rebuild' macro) or actively 4 | by hooking the mk_index.sh script to ftp STOR commands. 5 | 6 | See installation instructions below; 7 | 8 | DEPENDECIES: 9 | 10 | * glutil 2.4.5 or higher, compiled for a chrooted environment 11 | * sqlite 3.6.20 or higher 12 | 13 | 14 | INSTALLATION: 15 | 16 | * Compile and install the latest chrooted version of glutil: 17 | 18 | make clean 19 | ./configure --prefix / --enable-chroot-ownbin 20 | make install 21 | 22 | * Ensure that /tmp folders exists in //tmp 25 | chmod 1777 //tmp 26 | 27 | * Ensure that '//ftp-data/glutil/db/' exists and has proper 28 | permissions: 29 | 30 | mkdir -p //ftp-data/glutil/db/ 31 | chmod 777 //ftp-data/glutil/db/ 32 | 33 | Choose a different path where log will be stored by editing 34 | FILE_LOG_PATH variable in both .sh files 35 | 36 | * Install the scripts: 37 | 38 | mkdir -p //bin/scripts/flog 39 | cp fsearch.sh mk_index.sh un_index.sh stack_exec.sh //bin/scripts/flog 40 | chmod +x //bin/scripts/flog/*.sh 41 | 42 | * Configure site commands and STOR hooks (in glftpd.conf): 43 | 44 | cscript STOR post /bin/scripts/flog/mk_index.sh 45 | cscript DELE post /bin/scripts/flog/stack_exec.sh 46 | 47 | site_cmd FSEARCH EXEC /bin/scripts/flog/fsearch.sh 48 | custom-fsearch !8 * 49 | 50 | * Configure 'stack_exec.sh' script to execute 'un_index.sh' and 51 | whatever other script is already hooked to DELE command: 52 | 53 | CHAIN=( 54 | "/bin/scripts/flog/un_index.sh" 55 | "/bin/postdel" 56 | "/bin/something.." 57 | ) 58 | 59 | Read description inside 'stack_exec.sh' 60 | 61 | * Build the initial index using 'filelog-rebuild' macro in 'macros.glutil', 62 | make sure to have the latest version of the file, then run: 63 | 64 | glutil -m filelog-rebuild --altlog //ftp-data/glutil/db/filelog.db 65 | 66 | USAGE: 67 | 68 | SITE FSEARCH 69 | -------------------------------------------------------------------------------- /scripts/flog/fsearch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #@VERSION:00 3 | #@REVISION:03 4 | #GLUTIL=/bin/glutil-chroot 5 | SQLITE=/bin/sqlite3 6 | # 7 | FILE_LOG_PATH=/ftp-data/glutil/db/filelog.db 8 | # 9 | ############################################ 10 | # 11 | 12 | echo "${@}" | egrep -q "^[-._\%\*\(\) a-zA-Z0-9]+$" || exit 2 13 | 14 | echo "${@}" | egrep -q "^$" && exit 2 15 | 16 | qry=`echo "${@}" | tr '*' '%'` 17 | 18 | ${SQLITE} -init `dirname ${0}`/fsearch.sqlite3 ${FILE_LOG_PATH} "select path AS Path, (round(size/1024.0,2)) AS 'Size (K)', \ 19 | uid AS UID, gid AS GID from filelog where path LIKE '%${qry}%';" . 20 | 21 | exit 0 22 | -------------------------------------------------------------------------------- /scripts/flog/fsearch.sqlite3: -------------------------------------------------------------------------------- 1 | .headers on 2 | .width 0 0 3 | .separator " " 4 | .mode tab 5 | -------------------------------------------------------------------------------- /scripts/flog/mk_index.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | #@VERSION:0 3 | #@REVISION:11 4 | #@MACRO:filelog-rebuild|Rebuild the filelog based on filesystem info:{exe} -noop --preexec `gl_root=\{siteroot\};{exe} -x \{siteroot\} -R --preexec "echo \"CREATE TABLE filelog(ID INTEGER PRIMARY KEY, path TEXT, size INTEGER, time DATETIME, uid INTEGER, gid INTEGER, status INTEGER);\"" -lom "mode=8" -and -l: "basepath" ! -regex "^\." -printf "INSERT INTO filelog values(NULL,\"\{?rd:path:^$gl_root\}\",\{size\},\{mtime\},\{uid\},\{gid\},0);" | sqlite3 /tmp/glutil.frb.$$.tmp; mv /tmp/glutil.frb.$$.tmp \{?q:altlog@file\}; chmod 666 \{?q:altlog@file\}` 5 | #@MACRO:flog-installch|Install required libraries into glFTPd root:{m:exe} noop --preexec `! updatedb -e "{glroot}" -o /tmp/glutil.mlocate.db && echo "updatedb failed" && exit 1 ; li="/bin/sqlite3"; for lli in $li; do lf=$(locate -d /tmp/glutil.mlocate.db "$lli" | head -1) && l=$(ldd "$lf" | awk '{print $3}' | grep -v ')' | sed '/^$/d' ) && for f in $l ; do [ -f "$f" ] && dn="/glftpd$(dirname $f)" && ! [ -d $dn ] && mkdir -p "$dn"; [ -f "{glroot}$f" ] || if cp --preserve=all "$f" "{glroot}$f"; then echo "$lf: {glroot}$f"; fi; done; [ -f "{glroot}/bin/$(basename "$lf")" ] || if cp --preserve=all "$lf" "{glroot}/bin/$(basename "$lf")"; then echo "{glroot}/bin/$(basename "$lf")"; fi; done; rm -f /tmp/glutil.mlocate.db` 6 | # 7 | GLUTIL=/bin/glutil-chroot 8 | SQLITE=/bin/sqlite3 9 | # 10 | FILE_LOG_PATH=/ftp-data/glutil/db/filelog.db 11 | # 12 | REMOVE_EXISTING=0 13 | # 14 | ################################### 15 | # 16 | 17 | g_file=`echo "${1}" | cut -f 2- -d " "` 18 | g_path=`pwd`/${g_file} 19 | 20 | 21 | ${GLUTIL} --silent -x "${g_path}" \ 22 | -print "INSERT INTO filelog values(NULL,\"{?rd:path:^\/[^\/]+}\",{size},{mtime},{uid},{gid},0);" \ 23 | --noglconf | ${SQLITE} ${FILE_LOG_PATH} 24 | 25 | exit 0 26 | -------------------------------------------------------------------------------- /scripts/flog/stack_exec.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | ################################################# 3 | # 4 | # Simple script, runs commands in $CHAIN in 5 | # order. If and when a command fails, the 6 | # script breaks and returns the exit code 7 | # of that command. 8 | # 9 | # Usefull for attaching multiple commands 10 | # to a single ftp command via 'cscript'. 11 | # Obviously this is a low-performance solution, 12 | # in short - bash is slow 13 | # 14 | ################################################# 15 | # 16 | 17 | CHAIN=( 18 | "/bin/postdel" 19 | "/bin/scripts/flog/un_index.sh" 20 | ) 21 | 22 | for exe in "${CHAIN[@]}"; do 23 | ${exe} "${1}" "${2}" "${3}" || exit $? 24 | done 25 | 26 | 27 | -------------------------------------------------------------------------------- /scripts/flog/un_index.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | #@VERSION:00 4 | #@REVISION:04 5 | # 6 | GLUTIL=/bin/glutil-chroot 7 | SQLITE=/bin/sqlite3 8 | # 9 | FILE_LOG_PATH=/ftp-data/glutil/db/filelog.db 10 | # 11 | ################################### 12 | # 13 | 14 | g_file=`echo "${1}" | cut -f 2- -d " "` 15 | g_user=${2} 16 | g_path=`pwd`/${g_file} 17 | 18 | ${SQLITE} ${FILE_LOG_PATH} "DELETE FROM filelog WHERE path='${g_path}';" 19 | 20 | exit 0 21 | 22 | -------------------------------------------------------------------------------- /scripts/gb_get.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (C) 2013 NixNodes 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # DO NOT EDIT THESE LINES 19 | #@VERSION:01 20 | #@REVISION:13 21 | #@MACRO:gamescore|Game info lookup based on folder names (filesystem) [-arg1=]:{exe} -x {arg1} -lom "depth>0" --silent -v --loglevel=5 --preexec "{exe} -v --backup game" --dir -execv `{spec1} \{basepath\} \{exe\} \{gamefile\} \{glroot\} \{siterootn\} \{path\}` 22 | #@MACRO:gamescore-d|Game info lookup based on folder names (dirlog) [-arg1=]:{exe} -d --silent -v --loglevel=5 --preexec "{exe} -v --backup game" -execv "{spec1} \{basedir\} \{exe\} \{gamefile\} \{glroot\} \{siterootn\} \{dir\}" -regexi "{arg1}" 23 | #@MACRO:gamescore-e|Game info lookup:{exe} -noop --gamelog={?q:game@file} --silent --loglevel=1 --preexec `{exe} --gamelog={?q:game@file} --backup game; {spec1} \{basedir\} \{exe\} \{gamefile\} \{glroot\} \{siterootn\} "{arg1}" 1` 24 | # 25 | ## Retrieves game info using giantbomb API (XML) 26 | # 27 | ## Requires: - glutil-2.4.11 or above 28 | ## - libxml2 v2.7.7 or above 29 | ## - curl, date, grep, egrep, sed 30 | # 31 | ## Usage (macro): ./glutil -m gamescore --arg1=/path/to/games 32 | # 33 | ## To use this macro, place script in the same directory (or any subdirectory) where glutil is located 34 | # 35 | CURL="/usr/bin/curl" 36 | CURL_FLAGS="--silent" 37 | 38 | # libxml2 version 2.7.7 or above required 39 | XMLLINT="/usr/bin/xmllint" 40 | 41 | ###########################[ BEGIN OPTIONS ]############################# 42 | # 43 | GIANTBOMB_BURL="http://www.giantbomb.com/" 44 | GIANTBOMB_URL="${GIANTBOMB_BURL}api" 45 | # 46 | ## Get it from giantbomb website (registration required) 47 | GB_API_KEY="" 48 | # 49 | ## Updates gamelog 50 | UPDATE_GAMELOG=1 51 | # 52 | ############################[ END OPTIONS ]############################## 53 | 54 | BASEDIR=`dirname ${0}` 55 | 56 | [ -f "${BASEDIR}/config" ] && . ${BASEDIR}/config 57 | 58 | if ! [ "${7}" = "1" ]; then 59 | echo "${1}" | egrep -q -i "${INPUT_SKIP}" && exit 1 60 | QUERY=`echo "$1" | tr ' ' '.' | sed -r "s/$INPUT_CLEAN_REGEX//gi" | sed -r 's/[\.\_\-\(\)]/+/g' | sed -r 's/(^[+ ]+)|([+ ]+$)//g'` 61 | else 62 | QUERY="${6}" 63 | fi 64 | 65 | [ -z "$GB_API_KEY" ] && echo "ERROR: set GB_API_KEY first" && exit 1 66 | 67 | FIELD="reviews" 68 | 69 | [ -z "$QUERY" ] && exit 2 70 | 71 | APIKEY_STR="?api_key=${GB_API_KEY}" 72 | 73 | G_ID=`$CURL $CURL_FLAGS "${GIANTBOMB_URL}/search/${APIKEY_STR}&limit=1&resources=game&query=$QUERY" | $XMLLINT --xpath "string((/response/results//id)[1])" -` 74 | 75 | #echo "$GIANTBOMB_URL/search/$APIKEY_STR&limit=1&resources=game&query=$QUERY" 76 | 77 | [ -z "${G_ID}" ] && echo "ERROR: '$QUERY': Failed getting game ID" && exit 1 78 | 79 | RES=`$CURL $CURL_FLAGS ${GIANTBOMB_BURL}game/3030-${G_ID}/user-reviews/ | grep "" | head -1 | sed 's/.*//' | sed 's/[ ]*stars.*//'` 80 | 81 | [ -z "$RES" ] && echo "ERROR: '$QUERY': could not get result score from $GIANTBOMB_BURL""game/3030-$G_ID/user-reviews/" && exit 1 82 | 83 | 84 | echo "SCORE: '$QUERY': $RES" 85 | 86 | 87 | if [ ${UPDATE_GAMELOG} -eq 1 ]; then 88 | trap "rm /tmp/glutil.gg.$$.tmp; exit 2" 2 15 9 6 89 | GLR_E=`echo ${4} | sed 's/\//\\\\\//g'` 90 | DIR_E=`echo ${6} | sed "s/^$GLR_E//" | sed "s/^$GLSR_E//"` 91 | ${2} -k -regex "$DIR_E" --imatchq --silent && ${2} -f -e game ! -match "$DIR_E" --silent 92 | echo -en "dir $DIR_E\ntime `date +%s`\nscore $RES\n\n" > "/tmp/glutil.gg.$$.tmp" 93 | ${2} -z game --nobackup --silent < "/tmp/glutil.gg.$$.tmp" || echo "ERROR: failed writing to gamelog!!" 94 | rm /tmp/glutil.gg.$$.tmp 95 | fi 96 | 97 | exit 0 98 | -------------------------------------------------------------------------------- /scripts/imdb_update_dl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (C) 2014 NixNodes 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # DO NOT EDIT/REMOVE THESE LINES 19 | #@VERSION:00 20 | #@REVISION:09 21 | # 22 | GLUTIL=/bin/glutil-chroot 23 | IMDB_LOG=/ftp-data/glutil/db/imdb.dlog 24 | # 25 | BASEDIR=`dirname "${0}"` 26 | 27 | [ -f "${BASEDIR}/imdb_update_dl_config" ] && { 28 | . "${BASEDIR}/imdb_update_dl_config" 29 | } 30 | 31 | GLROOT="${1}" 32 | 33 | IMDB_LOG="${GLROOT}${IMDB_LOG}" 34 | 35 | [ -f "${BASEDIR}/common" ] || { 36 | echo "ERROR: ${BASEDIR}/common missing" 37 | exit 1 38 | } 39 | 40 | . "${BASEDIR}/common" 41 | 42 | 43 | I_DIR="${2}" 44 | I_TIME="${3}" 45 | I_IMDBID="${4}" 46 | I_SCORE="${5}" 47 | I_VOTES="${6}" 48 | I_GENRE="${7}" 49 | I_RATED="${8}" 50 | I_TITLE="${9}" 51 | I_DIRECTOR="${10}" 52 | I_ACTORS="${11}" 53 | I_RELEASED="${12}" 54 | I_RUNTIME="${13}" 55 | I_YEAR="${14}" 56 | I_PLOT="${15}" 57 | 58 | [ -z "${I_DIR}" ] && exit 1 59 | 60 | try_lock_r 12 imdb_lk "`echo "${IMDB_LOG}" | md5sum | cut -d' ' -f1`" 120 "ERROR: could not obtain lock" 61 | 62 | if [ -f "${IMDB_LOG}" ]; then 63 | 64 | if ! ${GLUTIL} -e imdb -ff --silent --imdblog "${IMDB_LOG}" --nofq -l: dir ! -match "${I_DIR}" --rev; then 65 | echo "ERROR: -e failed: ${I_DIR}, ${IMDB_LOG}" 66 | exit 1 67 | fi 68 | 69 | if ${GLUTIL} -q imdb --imdblog "${IMDB_LOG}" -l: dir -match "${I_DIR}" --rev --silent; then 70 | echo "ERROR: old record still exists: ${I_DIR}, ${IMDB_LOG}" 71 | exit 1 72 | fi 73 | else 74 | f_create=1 75 | fi 76 | 77 | echo -e "dir ${I_DIR}\ntime ${I_TIME}\nimdbid ${I_IMDBID}\nscore ${I_SCORE}\nvotes ${I_VOTES}\ngenre ${I_GENRE}\nrated ${I_RATED}\ntitle ${I_TITLE}\ndirector ${I_DIRECTOR}\nactors ${I_ACTORS}\nreleased ${I_RELEASED}\nruntime ${I_RUNTIME}\nyear ${I_YEAR}\nplot ${I_PLOT}\n" | 78 | ${GLUTIL} -z imdb --imdblog "${IMDB_LOG}" || { 79 | echo "ERROR: could not write ${IMDB_LOG}" 80 | exit 1 81 | } 82 | 83 | [ -n "${f_create}" ] && { 84 | chmod 666 "${IMDB_LOG}" 85 | touch "${IMDB_LOG}.bk" 86 | chmod -f 666 "${IMDB_LOG}.bk" 87 | } 88 | 89 | exit 0 -------------------------------------------------------------------------------- /scripts/imdb_update_dl_config: -------------------------------------------------------------------------------- 1 | GLUTIL=/bin/glutil-chroot 2 | IMDB_LOG=/ftp-data/glutil/db/imdb.dlog -------------------------------------------------------------------------------- /scripts/killslow_config: -------------------------------------------------------------------------------- 1 | #@REVISION:02 2 | # 3 | ## Minimum allowed transfer rate (bytes per second) 4 | MINRATE=512000 5 | # 6 | # Maximum time a transfer can be under the speed limit, before killing it (seconds) 7 | MAXSLOWTIME=7 8 | # 9 | ## Enforce only after transfer is atleast this amount of seconds old 10 | WAIT=3 11 | # 12 | ## File to log to 13 | LOG="/var/log/killslow.log" 14 | # 15 | ## Verbose output 16 | VERBOSE=0 17 | # 18 | ## Ban user after violating minimum speed limit (seconds) 19 | ## Setting 0 disables ban after kick 20 | BANUSER=20 21 | # 22 | ## Exempt users list 23 | EXEMPTUSERS="user1|user2" 24 | # 25 | ## Do NOT enforce limit on siteops 26 | EXEMPTSITEOPS=0 27 | # 28 | ## Enforce only on files matching this expression 29 | FILES_ENFORCED="\.(r([0-9]{1,3}|ar)|mkv|avi|mp((e|())g|[34]))$" 30 | # 31 | ## Do NOT enforce paths matching this expression, 32 | ## case-insensitive 33 | PATHS_FILTERED="\/(sample|cover(s|())|proof)(($)|\/)" 34 | # 35 | ## Do not enforce when only one user is uploading 36 | ## into a certain directory 37 | IGNORE_LONE_RANGER=1 38 | # 39 | ## Remove file the violator was uploading, immediately 40 | ## after sending process the kill signal 41 | WIPE_FILE=1 42 | # 43 | ## Remove all file records the violator was uploading 44 | ## from the dupelog 45 | WIPE_FROM_DUPELOG=1 46 | # 47 | ## Log to glftpd.log 48 | LOG_TO_GLFTPD=0 49 | # -------------------------------------------------------------------------------- /scripts/nuke.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | glftpddir="/glftpd" 4 | glutil="/glftpd/bin/sources/glutil/glutil" 5 | nukeuser="glftpd" 6 | 7 | release=$1 8 | ratio=$2 9 | reason=$3 10 | nuke="/glftpd/bin/nuker" 11 | config="-r /glftpd/etc/java.conf" 12 | 13 | if [ "$release" == "" ]; then 14 | echo "Type: !nuke " 15 | exit 0 16 | fi 17 | 18 | if [ "$ratio" == "" ]; then 19 | echo "Please enter a ratio. !nuke " 20 | exit 0 21 | fi 22 | 23 | if [ "$reason" == "" ]; then 24 | echo "Please enter a reason. !nuke " 25 | exit 0 26 | fi 27 | 28 | ### No need to edit belowe ### 29 | findrelease=`$glutil -d -v | grep $release | awk '{print $2}' | head -1` 30 | if [ "$findrelease" ] 31 | then 32 | $nuke $config -N $nukeuser -n {$findrelease} $ratio $reason >/dev/null 33 | echo "NUKED: $release ratio: $ratio reason: $reason" 34 | else 35 | echo "$release was not found on site" 36 | fi 37 | -------------------------------------------------------------------------------- /scripts/script_update.d/00main: -------------------------------------------------------------------------------- 1 | #@REVISION:22 2 | 3 | INPUT_SOURCES=( 4 | "base/script-update-config scripts/script_update_config 644 1" 5 | "base/config scripts/config 644 1" 6 | "updates/02libs scripts/script_update.d/02libs 644 0 1" 7 | "updates/10taskd scripts/script_update.d/10taskd 644 0 1" 8 | "updates/11taskd_00modules scripts/script_update.d/11taskd_00modules 644 0 1" 9 | "updates/12killslow scripts/script_update.d/12killslow 644 0 1" 10 | "updates/14imdb scripts/script_update.d/14imdb 644 0 1" 11 | "updates/16tvrage scripts/script_update.d/16tvrage 644 0 1" 12 | "updates/18siteclean scripts/script_update.d/18siteclean 644 0 1" 13 | "updates/20gamebomb scripts/script_update.d/20gamebomb 644 0 1" 14 | "updates/30precheck scripts/script_update.d/30precheck 644 0 1" 15 | "updates/40misc scripts/script_update.d/40misc 644 0 1" 16 | "updates/70custom scripts/script_update.d/70custom 644 2 1" 17 | ) 18 | -------------------------------------------------------------------------------- /scripts/script_update.d/02libs: -------------------------------------------------------------------------------- 1 | #@REVISION:02 2 | 3 | INPUT_SOURCES=( 4 | "libs/common scripts/common 644 0" 5 | "libs/sort_common scripts/sort_common 644 0" 6 | ) -------------------------------------------------------------------------------- /scripts/script_update.d/10taskd: -------------------------------------------------------------------------------- 1 | #@REVISION:16 2 | 3 | INPUT_SOURCES=( 4 | "taskd/config scripts/taskd/taskd_config 644 1" 5 | "taskd/server-config scripts/taskd/taskd_server_config 644 1" 6 | "taskd/client-config scripts/taskd/taskc_config 644 1" 7 | "taskd/taskd scripts/taskd/taskd.sh 755 0" 8 | "taskd/taskc scripts/taskd/taskc.sh 755 0" 9 | ) 10 | 11 | INPUT_DEPENDENCIES=( 12 | "libs/common scripts/common 644 6 0 02" 13 | ) -------------------------------------------------------------------------------- /scripts/script_update.d/11taskd_00modules: -------------------------------------------------------------------------------- 1 | #@REVISION:06 2 | 3 | INPUT_SOURCES=( 4 | "taskd/mod scripts/taskd/modules 744 8" 5 | "taskd/mod/nuke-0 scripts/taskd/modules/nuke 644 4" 6 | "taskd/mod/nuke scripts/taskd/modules/12nuke 644 0" 7 | "taskd/mod/tvrage scripts/taskd/modules/14tvrage 644 0" 8 | "taskd/mod/imdb scripts/taskd/modules/16imdb 644 0" 9 | ) 10 | 11 | INPUT_DEPENDENCIES=( 12 | "libs/common scripts/common 644 6 0 02" 13 | "updates/10taskd scripts/script_update.d/10taskd 644 6 1 14" 14 | "tvrage/tvrage scripts/tvrage_get.sh 755 6 0 338" 15 | "imdb/imdb scripts/imdb_get.sh 755 6 0 246" 16 | ) -------------------------------------------------------------------------------- /scripts/script_update.d/12killslow: -------------------------------------------------------------------------------- 1 | #@REVISION:03 2 | 3 | INPUT_SOURCES=( 4 | "killslow/killslow scripts/killslow.sh 755 0" 5 | "killslow/config scripts/killslow_config 644 1" 6 | ) -------------------------------------------------------------------------------- /scripts/script_update.d/14imdb: -------------------------------------------------------------------------------- 1 | #@REVISION:16 2 | 3 | INPUT_SOURCES=( 4 | "imdb/imdb scripts/imdb_get.sh 755 0" 5 | "imdb/sort scripts/sort_imdb.sh 755 0" 6 | "imdb/updatedl scripts/imdb_update_dl.sh 755 0" 7 | "imdb/updatedl/config scripts/imdb_update_dl_config 644 1" 8 | ) 9 | 10 | INPUT_DEPENDENCIES=( 11 | "libs/common scripts/common 644 6 0 03" 12 | "libs/sort_common scripts/sort_common 644 6 0 03" 13 | ) -------------------------------------------------------------------------------- /scripts/script_update.d/16tvrage: -------------------------------------------------------------------------------- 1 | #@REVISION:12 2 | 3 | INPUT_SOURCES=( 4 | "tvrage/tvrage scripts/tvrage_get.sh 755 0" 5 | "tvrage/sort scripts/sort_tvrage.sh 755 0" 6 | "tvrage/updatedl scripts/tvrage_update_dl.sh 755 0" 7 | "tvrage/updatedl/config scripts/tvrage_update_dl_config 644 1" 8 | ) 9 | 10 | INPUT_DEPENDENCIES=( 11 | "libs/common scripts/common 644 6 0 02" 12 | "libs/sort_common scripts/sort_common 644 6 0 03" 13 | ) -------------------------------------------------------------------------------- /scripts/script_update.d/18siteclean: -------------------------------------------------------------------------------- 1 | #@REVISION:04 2 | 3 | INPUT_SOURCES=( 4 | "siteclean/siteclean scripts/site_clean.sh 755 0" 5 | "siteclean/config scripts/site_clean_config 644 1" 6 | ) 7 | -------------------------------------------------------------------------------- /scripts/script_update.d/20gamebomb: -------------------------------------------------------------------------------- 1 | #@REVISION:02 2 | 3 | INPUT_SOURCES=( 4 | "gamebomb/gamebomb scripts/gb_get.sh 755 0" 5 | ) -------------------------------------------------------------------------------- /scripts/script_update.d/30precheck: -------------------------------------------------------------------------------- 1 | #@REVISION:04 2 | 3 | INPUT_SOURCES=( 4 | "precheck/compiler/gconf ftp-data/glutil/precheck-config/gconf 644 1" 5 | "precheck/compiler scripts/precheck_compile.sh 755 0" 6 | ) -------------------------------------------------------------------------------- /scripts/script_update.d/40misc: -------------------------------------------------------------------------------- 1 | #@REVISION:04 2 | 3 | INPUT_SOURCES=( 4 | "misc/mk-test scripts/mk_test.sh 755 0" 5 | "misc/check-incomplete scripts/check_incomplete.sh 755 0" 6 | "misc/macros scripts/misc/macros.glutil 755 0" 7 | ) -------------------------------------------------------------------------------- /scripts/script_update.d/70custom: -------------------------------------------------------------------------------- 1 | INPUT_SOURCES=( 2 | "check-incomplete scripts/check_incomplete.sh 755 0" 3 | ) -------------------------------------------------------------------------------- /scripts/script_update_config: -------------------------------------------------------------------------------- 1 | #@REVISION:02 2 | 3 | CURL_FLAGS="--silent --max-time 30" 4 | CURL=/usr/bin/curl 5 | BASE_URL="https://raw.githubusercontent.com/nixnodes/glutil/master" 6 | BASE_SEARCHDIR=/bin 7 | 8 | VERBOSE=1 9 | 10 | # See script_update.d folder 11 | 12 | -------------------------------------------------------------------------------- /scripts/site_clean.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (C) 2014 NixNodes 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # DO NOT EDIT/REMOVE THESE LINES 19 | #@VERSION:00 20 | #@REVISION:13 21 | #@MACRO:site-clean|Usage\: -m site-clean [-arg1=]:{exe} -noop --postexec "{spec1} {arg1}" 22 | # 23 | ## Dependencies: glutil-2.6.2 24 | # 25 | GLUTIL="/bin/glutil" 26 | DF=/bin/df 27 | 28 | [ -n "${1}" ] && { 29 | . ${1} 30 | } || { 31 | . `dirname ${0}`/site_clean_config 32 | } 33 | 34 | ######################################## 35 | 36 | d_used() 37 | { 38 | ${DF} | egrep "${1}" | awk '{print $3}' 39 | } 40 | 41 | d_free() 42 | { 43 | ${DF} | egrep "${1}" | awk '{print $4}' 44 | } 45 | 46 | proc_tgmk_str() 47 | { 48 | mod=0 49 | case ${1} in 50 | *K) 51 | mod=1024 52 | ;; 53 | *M) 54 | mod=1048576 55 | ;; 56 | *G) 57 | mod=1073741824 58 | ;; 59 | *T) 60 | mod=1099511627776 61 | ;; 62 | esac 63 | p=`echo "${1}" | sed -r 's/[^0-9]//'` 64 | echo `expr ${p} \* ${mod}` 65 | } 66 | 67 | pinc() { 68 | echo `expr ${1} + 1` 69 | } 70 | 71 | get_action() 72 | { 73 | c=0 74 | for l in "${ACTIONS[@]}"; do 75 | [ `expr ${c} \% 3` -gt 0 ] && c=`pinc ${c}` && continue 76 | [ "${l}" = "${1}" ] && { 77 | echo ${ACTIONS[`pinc ${c}`]} 78 | break 79 | } 80 | c=`pinc ${c}` 81 | done 82 | } 83 | 84 | get_post_action() 85 | { 86 | c=0 87 | for l in "${ACTIONS[@]}"; do 88 | [ `expr ${c} \% 3` -gt 0 ] && c=`pinc ${c}` && continue 89 | [ "${l}" = "${1}" ] && { 90 | echo ${ACTIONS[`expr ${c} + 2`]} 91 | break 92 | } 93 | c=`pinc ${c}` 94 | done 95 | } 96 | 97 | MIN_FREE=`proc_tgmk_str ${MIN_FREE}` 98 | 99 | free=`expr $(d_free ${DEVICE}) \* 1024` 100 | 101 | [ ${ALWAYS_RUN} -eq 0 ] && 102 | [ ${free} -gt ${MIN_FREE} ] && exit 0 103 | 104 | used=`expr $(d_used ${DEVICE}) \* 1024` 105 | total=`expr ${free} + ${used}` 106 | 107 | max=`expr ${total} - ${MIN_FREE}` 108 | 109 | [ ${max} -lt 0 ] && echo "${path}: negative maximum, MIN_FREE shouldn't exceed device size" && exit 2 110 | 111 | 112 | for i in "${SECTIONS[@]}"; do 113 | path=`echo ${i} | cut -d " " -f1` 114 | [ -z "${path}" ] && continue 115 | percent=`echo ${i} | cut -d " " -f2` 116 | [ -z "${percent}" ] && echo "${path}: missing percentage value" && continue 117 | action=`echo ${i} | cut -d " " -f3` 118 | [ -z "${action}" ] && echo "${path}: missing action" && continue 119 | action_cmd=`get_action "${action}"` 120 | [ -z "${action_cmd}" ] && echo "${path}: missing command (${action})" && continue 121 | action_post_cmd=`get_post_action "${action}"` 122 | 123 | max_p=`expr $(expr ${max} / 100) \* ${percent}` 124 | 125 | ${GLUTIL} -x ${ROOT}/${path} -R -xdev --ftime -postprint \ 126 | "${ROOT}/${path}: {?L:(u64glob2) != 0:(?m:u64glob1/(1024^3)):(?p:0)}/{?m:(u64glob0/(1024^3))} G purged total" \ 127 | -lom "u64glob0 += size" -and \( -lom "(u64glob0) > ${max_p}" -and -lom "u64glob1 += size" \) -and \( -lom "mode = 4 || mode = 8" -and -lom "u64glob2 += 1" \) \ 128 | -execv "${action_cmd}" -lom "depth=1" --sort desc,mtime --postexec "${action_post_cmd}" 129 | done 130 | 131 | exit 0 132 | -------------------------------------------------------------------------------- /scripts/site_clean_config: -------------------------------------------------------------------------------- 1 | #@REVISION:02 2 | ######################################################## 3 | # # 4 | # Using multiple devices, each must have a config file # 5 | # like the example shown below; # 6 | # Macro is called with -arg1= (or execute # 7 | # 'site_clean.sh' passing as the first # 8 | # argument) on each config file. # 9 | # # 10 | ######################################################## 11 | ROOT="/glftpd/site" 12 | # 13 | ## Device containing $ROOT 14 | # 15 | DEVICE=/dev/sdb 16 | # 17 | ## Minimum free space on device 18 | # 19 | MIN_FREE=1G 20 | # 21 | ## Run even when not below $MIN_FREE 22 | # 23 | ALWAYS_RUN=0 24 | # 25 | ## Each section is defined as " " 26 | # 27 | ## is relative to $ROOT 28 | ## is the percentage of space (taking 29 | ## $MIN_FREE into account) the section is allowed 30 | ## to use up 31 | ## is the reference of command executed 32 | ## on oldest items in exceeding its aloted 33 | ## (see ACTIONS array below) 34 | # 35 | SECTIONS=( 36 | "tv-x264 60 notify" 37 | "xvid 40 notify" 38 | ) 39 | # 40 | ## Each command is defined as " " 41 | # 42 | ## is used in $SECTIONS configuration, 43 | ## pointing at the command to execute 44 | ## is executed when a section exceeds its 45 | ## aloted percentage 46 | ## is executed after operation on a 47 | ## section is completed 48 | # 49 | ACTIONS=( 50 | "wipe" "rm -Rf {path}" "{exe} --check --fix --ghost" 51 | "notify" "echo purging(test) {mtime}: {path}" "echo {exe} --check --fix --ghost" 52 | ) -------------------------------------------------------------------------------- /scripts/sort_common: -------------------------------------------------------------------------------- 1 | #@VERSION:00 2 | #@REVISION:04 3 | # 4 | #[mode] [val] 5 | proc_sort() { 6 | s_IFS=${IFS} 7 | IFS="," 8 | for i in ${2}; do 9 | O_VAL=`echo "${i}" | sed -r 's/^[ ]+//' | sed -r 's/[ ]+$//' | sed -r 's/[^a-zA-Z0-9\.\_\-]/_/g'` 10 | [ -z "${O_VAL}" ] && continue 11 | C_PATH="${DT_PATH}/${1}/${O_VAL}" 12 | ! [ -d "${C_PATH}" ] && { 13 | mkdir -p "${C_PATH}" &> /dev/null || { 14 | chmod 777 "${C_PATH}" &> /dev/null 15 | IFS=${s_IFS} 16 | return 2 17 | } 18 | } 19 | 20 | ! [ -h "${C_PATH}/${B_PATH}" ] && { 21 | print_str "${C_PATH}/${B_PATH}" 22 | ln -s "${CR_PATH}" "${C_PATH}" &> /dev/null 23 | } 24 | done 25 | IFS=${s_IFS} 26 | } -------------------------------------------------------------------------------- /scripts/sort_imdb.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Copyright (C) 2014 NixNodes 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # DO NOT EDIT/REMOVE THESE LINES 19 | #@VERSION:00 20 | #@REVISION:11 21 | #@MACRO:imdb-sort|Build sorted links based on iMDB data:{exe} --silent -q imdb --sort asc,time --imdblog "{?q:imdb@file}" -execv `{spec1} \{dir\} none \{?p:\} \{siterootb\} "{arg1} " \{genre\} \{year\} \{actors\} \{director\} \{rated\} \{score\}` 22 | # 23 | ## 24 | BASE_DIR=/glftpd/site/_sorted 25 | # 26 | ########################################## 27 | 28 | BASEDIR=`dirname ${0}` 29 | 30 | [ -f "${BASEDIR}/common" ] || { 31 | echo "ERROR: ${BASEDIR}/common missing" 32 | exit 2 33 | } 34 | 35 | . ${BASEDIR}/common 36 | 37 | [ -f "${BASEDIR}/sort_common" ] || { 38 | echo "ERROR: ${BASEDIR}/sort_common missing" 39 | exit 2 40 | } 41 | 42 | . ${BASEDIR}/sort_common 43 | 44 | [ ${#5} -gt 1 ] && BASE_DIR=`echo "${5}" | sed -r 's/^[ ]+//' | sed -r 's/[ ]+$//'` 45 | 46 | R_PATH="${1}" 47 | R_ARG=${2} 48 | R_GLROOT="${3}" 49 | R_SITEROOT="${4}" 50 | R_GENRE="${6}" 51 | R_YEAR="${7}" 52 | R_ACTORS="${8}" 53 | R_DIRECTOR="${9}" 54 | R_RATING="${10}" 55 | R_SCORE="${11}" 56 | 57 | [ "${R_ARG}" = "mute" ] && OUT_PRINT=0 58 | 59 | C_SITEROOT=`echo "${R_SITEROOT}" | sed -r 's/\//\\\\\//g'` 60 | 61 | 62 | T_PATH=`echo "${R_PATH}" | sed -r "s/^${C_SITEROOT}//"` 63 | 64 | [ -z "${T_PATH}" ] && print_str "failed extracting base target path" && exit 0 65 | 66 | ! [ -d "${BASE_DIR}" ] && { 67 | mkdir -p "${BASE_DIR}" && 68 | chmod 777 "${BASE_DIR}" || exit 2 69 | 70 | } 71 | 72 | BT_PATH=`dirname "${T_PATH}"` 73 | 74 | [ -z "${BT_PATH}" ] || [ "${BT_PATH}" = "/" ] && print_str "failed extracting directory part of base path - ${BT_PATH}" && exit 0 75 | 76 | DT_PATH="${BASE_DIR}${BT_PATH}" 77 | 78 | ! [ -d "${DT_PATH}" ] && { 79 | mkdir -p "${DT_PATH}" && 80 | chmod 777 "${DT_PATH}" || exit 2 81 | 82 | } 83 | 84 | B_PATH=`basename "${T_PATH}"` 85 | 86 | C_GLROOT=`echo "${R_GLROOT}" | sed -r 's/\//\\\\\//g'` 87 | 88 | CR_PATH=`echo "${R_PATH}" | sed -r "s/^${C_GLROOT}//"` 89 | 90 | 91 | [ -n "${R_GENRE}" ] && proc_sort Genre "${R_GENRE}" 92 | [ -n "${R_YEAR}" ] && proc_sort Year ${R_YEAR} 93 | [ -n "${R_ACTORS}" ] && proc_sort Actor "${R_ACTORS}" 94 | [ -n "${R_DIRECTOR}" ] && proc_sort Director "${R_DIRECTOR}" 95 | [ -n "${R_RATING}" ] && proc_sort Rating "${R_RATING}" 96 | [ -n "${R_SCORE}" ] && proc_sort Score "${R_SCORE}" 97 | 98 | chmod -Rf 777 "${BASE_DIR}" &> /dev/null 99 | 100 | exit 0 -------------------------------------------------------------------------------- /scripts/sort_tvrage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Copyright (C) 2014 NixNodes 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # DO NOT EDIT/REMOVE THESE LINES 19 | #@VERSION:00 20 | #@REVISION:13 21 | #@MACRO:tvrage-sort|Build sorted links based on TVRage data:{exe} --silent -q tvrage --sort asc,time --tvlog "{?q:tvrage@file}" -execv `{spec1} \{dir\} none \{?p:\} \{siterootb\} "{arg1} " \{genre\} \{startyear\} \{country\} \{airtime\} \{airday\} \{seasons\} \{class\} \{runtime\} \{network\} \{status\} \{(?L:endyear>=startyear:(?m:(endyear-startyear)):(?p:0))\}` 22 | # 23 | ## 24 | BASE_DIR=/glftpd/site/_sorted 25 | # 26 | ########################################## 27 | 28 | BASEDIR=`dirname ${0}` 29 | 30 | [ -f "${BASEDIR}/common" ] || { 31 | echo "ERROR: ${BASEDIR}/common missing" 32 | exit 2 33 | } 34 | 35 | . ${BASEDIR}/common 36 | 37 | [ -f "${BASEDIR}/sort_common" ] || { 38 | echo "ERROR: ${BASEDIR}/sort_common missing" 39 | exit 2 40 | } 41 | 42 | . ${BASEDIR}/sort_common 43 | 44 | [ ${#5} -gt 1 ] && BASE_DIR=`echo "${5}" | sed -r 's/^[ ]+//' | sed -r 's/[ ]+$//'` 45 | 46 | R_PATH="${1}" 47 | R_ARG=${2} 48 | R_GLROOT="${3}" 49 | R_SITEROOT="${4}" 50 | R_GENRE="${6}" 51 | R_STARTYEAR="${7}" 52 | R_COUNTRY="${8}" 53 | R_AIRTIME="${9}" 54 | R_AIRDAY="${10}" 55 | R_SEASONS="${11}" 56 | R_CLASS="${12}" 57 | R_RUNTIME="${13}" 58 | R_NETWORK="${14}" 59 | R_STATUS="${15}" 60 | RS_YEARRUN="${16}" 61 | 62 | 63 | [ "${R_ARG}" = "mute" ] && OUT_PRINT=0 64 | 65 | C_SITEROOT=`echo "${R_SITEROOT}" | sed -r 's/\//\\\\\//g'` 66 | 67 | 68 | T_PATH=`echo "${R_PATH}" | sed -r "s/^${C_SITEROOT}//"` 69 | 70 | [ -z "${T_PATH}" ] && print_str "failed extracting base target path" && exit 0 71 | 72 | ! [ -d "${BASE_DIR}" ] && { 73 | mkdir -p "${BASE_DIR}" && 74 | chmod 777 "${BASE_DIR}" || exit 2 75 | 76 | } 77 | 78 | BT_PATH=`dirname "${T_PATH}"` 79 | 80 | [ -z "${BT_PATH}" ] || [ "${BT_PATH}" = "/" ] && print_str "failed extracting directory part of base path - ${BT_PATH}" && exit 0 81 | 82 | DT_PATH="${BASE_DIR}${BT_PATH}" 83 | 84 | ! [ -d "${DT_PATH}" ] && { 85 | mkdir -p "${DT_PATH}" && 86 | chmod 777 "${DT_PATH}" || exit 2 87 | 88 | } 89 | 90 | B_PATH=`basename "${T_PATH}"` 91 | 92 | C_GLROOT=`echo "${R_GLROOT}" | sed -r 's/\//\\\\\//g'` 93 | 94 | CR_PATH=`echo "${R_PATH}" | sed -r "s/^${C_GLROOT}//"` 95 | 96 | [ -n "${R_GENRE}" ] && proc_sort Genre "${R_GENRE}" 97 | [ -n "${R_STARTYEAR}" ] && proc_sort Startyear ${R_STARTYEAR} 98 | [ -n "${R_COUNTRY}" ] && proc_sort Country "${R_COUNTRY}" 99 | [ -n "${R_AIRTIME}" ] && proc_sort Airtime "${R_AIRTIME}" 100 | [ -n "${R_AIRDAY}" ] && proc_sort Airday "${R_AIRDAY}" 101 | [ -n "${R_SEASONS}" ] && proc_sort Seasons "${R_SEASONS}" 102 | [ -n "${R_CLASS}" ] && proc_sort Classification "${R_CLASS}" 103 | [ -n "${R_RUNTIME}" ] && proc_sort Runtime "${R_RUNTIME}" 104 | [ -n "${R_NETWORK}" ] && proc_sort Network "${R_NETWORK}" 105 | [ -n "${R_STATUS}" ] && proc_sort Status "${R_STATUS}" 106 | [ -n "${RS_YEARRUN}" ] && proc_sort Years-on-air "${RS_YEARRUN}" 107 | 108 | chmod -Rf 777 "${BASE_DIR}" &> /dev/null 109 | 110 | exit 0 -------------------------------------------------------------------------------- /scripts/taskd/modules-disabled/.placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nixnodes/glutil/dda706b74390c51e8e6e04dfc4e159906c665050/scripts/taskd/modules-disabled/.placeholder -------------------------------------------------------------------------------- /scripts/taskd/modules/12nuke: -------------------------------------------------------------------------------- 1 | #@VERSION:00 2 | #@REVISION:04 3 | 4 | mod_nuke_proc_failed() 5 | { 6 | if [ ${1} -eq 2 ]; then 7 | echo "ERROR: mod_nuke: '${2}': not found" 8 | else 9 | echo "ERROR: mod_nuke: operation failed: ${1}" 10 | fi 11 | return ${1} 12 | } 13 | 14 | mod_nuke() 15 | { 16 | [ -z "${2}" ] && { 17 | echo "ERROR: mod_nuke: missing search query" 18 | return 1 19 | } 20 | 21 | mod_nuke_reason="${3}" 22 | 23 | [ -z "${mod_nuke_reason}" ] && { 24 | mod_nuke_reason="/" 25 | } 26 | 27 | mod_nuke_msg_lockfail="ERROR: mod_nuke: could not obtain lock" 28 | 29 | case ${1} in 30 | 1) # nuke 31 | try_lock_r 12 taskd "glob_nuker" 15 "${mod_nuke_msg_lockfail}" 32 | ${GLUTIL} -d \( -l: "?p:${2}" -regex "\/" and -name "${2}" \) or \( \! -l: "?p:${2}" -regex "\/" and -l: basedir -name "${2}" \) -execv "${GLROOT}/bin/nuker -N ${MOD_NUKE_USER} -r /etc/glftpd.conf -n {dir} ${MOD_NUKE_MULTIPLIER} ${mod_nuke_reason} " --silent || { 33 | mod_nuke_proc_failed ${?} "${2}" 34 | return $? 35 | } 36 | ;; 37 | 2) # unnuke 38 | try_lock_r 12 taskd "glob_nuker" 15 "${mod_nuke_msg_lockfail}" 39 | ${GLUTIL} -d \( -l: "?p:${2}" -regex "\/" and -name "${2}" \) or \( \! -l: "?p:${2}" -regex "\/" and -l: basedir -name "${2}" \) -execv "${GLROOT}/bin/nuker -N ${MOD_NUKE_USER} -r /etc/glftpd.conf -u {dir} ${mod_nuke_reason}" --silent || { 40 | mod_nuke_proc_failed ${?} "${2}" 41 | return $? 42 | } 43 | ;; 44 | *) 45 | echo "ERROR: mod_nuke: invalid nuke mode (1/2, nuke/unnuke)" 46 | return 1 47 | ;; 48 | esac 49 | 50 | return 0 51 | } 52 | 53 | register_module 12 mod_nuke -------------------------------------------------------------------------------- /scripts/taskd/modules/14tvrage: -------------------------------------------------------------------------------- 1 | #@VERSION:00 2 | #@REVISION:05 3 | 4 | mod_tvrage_logupdate() 5 | { 6 | [ -z "${2}" ] && { 7 | echo "ERROR: mod_nuke: missing search query" 8 | return 1 9 | } 10 | 11 | [ -z "${MOD_TVRAGE_LOG}" ] && { 12 | MOD_TVRAGE_LOG="${GLROOT}/ftp-data/glutil/db/tvrage" 13 | } 14 | 15 | if [ ${1} -eq 1 ]; then 16 | mod_tvrage_lookup_flags=12 17 | elif [ ${1} -eq 2 ]; then 18 | mod_tvrage_lookup_flags=1 19 | else 20 | mod_tvrage_lookup_flags=2 21 | fi 22 | 23 | #try_lock_r 16 taskd "glob_tvlog" 120 "ERROR: mod_tvrage_logupdate: could not obtain lock" 24 | 25 | if ${GLUTIL} -m tvrage-e -arg 1 "${2}" -arg 3 "${mod_tvrage_lookup_flags}" --tvlog "${MOD_TVRAGE_LOG}"; then 26 | return 0 27 | fi 28 | 29 | return 1 30 | } 31 | 32 | register_module 14 mod_tvrage_logupdate -------------------------------------------------------------------------------- /scripts/taskd/modules/16imdb: -------------------------------------------------------------------------------- 1 | #@VERSION:00 2 | #@REVISION:07 3 | 4 | mod_imdb_logupdate() 5 | { 6 | [ -z "${2}" ] && { 7 | echo "ERROR: mod_nuke: missing search query" 8 | return 1 9 | } 10 | 11 | [ -z "${MOD_IMDB_LOG}" ] && { 12 | MOD_IMDB_LOG="${GLROOT}/ftp-data/glutil/db/imdb.log" 13 | } 14 | 15 | if [ ${1} -eq 1 ]; then 16 | mod_imdb_lookup_flags=12 17 | elif [ ${1} -eq 2 ]; then 18 | mod_imdb_lookup_flags=1 19 | else 20 | mod_imdb_lookup_flags=2 21 | fi 22 | 23 | #try_lock_r 14 taskd "glob_imdb" 120 "ERROR: mod_imdb_logupdate: could not obtain lock" 24 | 25 | if ${GLUTIL} -m imdb-e -arg 1 "${2}" -arg 3 "${mod_imdb_lookup_flags}" --imdblog "${MOD_IMDB_LOG}"; then 26 | return 0 27 | fi 28 | 29 | return 1 30 | } 31 | 32 | register_module 16 mod_imdb_logupdate -------------------------------------------------------------------------------- /scripts/taskd/taskc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Copyright (C) 2014 NixNodes 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | ######################################################################### 19 | # DO NOT EDIT/REMOVE THESE LINES 20 | #@VERSION:00 21 | #@REVISION:12 22 | # 23 | #@MACRO:taskc-installch:{exe} -noop --preexec `! updatedb -e "{glroot}" -o /tmp/glutil.mlocate.$$.db && echo "updatedb failed" && exit 1 ; li="/bin/nc /bin/socat"; for lli in $li; do lf=$(locate -d /tmp/glutil.mlocate.$$.db "$lli" | head -1) && l=$(ldd "$lf" | awk '\{print $3\}' | grep -v ')' | sed '/^$/d' ) && for f in $l ; do [ -f "$f" ] && dn="/glftpd$(dirname $f)" && ! [ -d $dn ] && mkdir -p "$dn"; [ -f "{glroot}$f" ] || if cp --preserve=all "$f" "{glroot}$f"; then echo "$lf: {glroot}$f"; fi; done; [ -f "{glroot}/bin/$(basename "$lf")" ] || if cp --preserve=all "$lf" "{glroot}/bin/$(basename "$lf")"; then echo "{glroot}/bin/$(basename "$lf")"; fi; done; rm -f /tmp/glutil.mlocate.$$.db` 24 | # 25 | ######################################################################### 26 | 27 | BASE_PATH=`dirname "${0}"` 28 | 29 | [ -f "${BASE_PATH}/taskc_config" ] && . "${BASE_PATH}/taskc_config" || { 30 | echo "ERROR: ${BASE_PATH}/taskc_config: configuration file missing" 31 | exit 1 32 | } 33 | 34 | MODE="${1}" 35 | 36 | [ -z "${MODE}" ] && { 37 | echo "ERROR: missing mode" 38 | exit 1 39 | } 40 | 41 | echo "${MODE}" | egrep -q '^[0-9]+$' || { 42 | echo "ERROR: invalid mode" 43 | exit 1 44 | } 45 | 46 | out_U1="${MODE}" 47 | out_U2="${2}" 48 | 49 | echo "${out_U1}" | egrep -q '^[0-9]+$' || { 50 | echo "ERROR: u1: invalid argument" 51 | exit 1 52 | } 53 | 54 | NL=" 55 | " 56 | 57 | out_GE1="${3}" 58 | out_GE2="${4}" 59 | out_GE3="${5}" 60 | out_GE4="${6}" 61 | 62 | [ -n "${out_GE1}" ] && b_proc="${b_proc}ge1 ${out_GE1}${NL}" 63 | [ -n "${out_GE2}" ] && b_proc="${b_proc}ge2 ${out_GE2}${NL}" 64 | [ -n "${out_GE3}" ] && b_proc="${b_proc}ge3 ${out_GE3}${NL}" 65 | [ -n "${out_GE4}" ] && b_proc="${b_proc}ge4 ${out_GE4}${NL}" 66 | 67 | if [ ${SSL} -eq 1 ]; then 68 | echo -e "u1 ${out_U1}\nu2 ${out_U2}\nge8 ${PASS}\n${b_proc}\n" | 69 | ${GLUTIL} -z ge2 --raw | ${SOCAT} -t 60 stdio "openssl-connect:${CONNECT_IP}:${CONNECT_PORT},verify=${SSL_VERIFY}" 70 | else 71 | echo -e "u1 ${out_U1}\nu2 ${out_U2}\nge8 ${PASS}\n${b_proc}\n" | 72 | ${GLUTIL} -z ge2 --raw | ${NC} ${CONNECT_IP} ${CONNECT_PORT} 73 | fi 74 | 75 | exit 0 -------------------------------------------------------------------------------- /scripts/taskd/taskc_config: -------------------------------------------------------------------------------- 1 | GLUTIL=/bin/glutil 2 | SOCAT=/usr/bin/socat 3 | NC=/bin/nc 4 | CONNECT_IP=127.0.0.1 5 | CONNECT_PORT=4411 6 | PASS=test1234 7 | SSL=1 8 | SSL_VERIFY=0 -------------------------------------------------------------------------------- /scripts/taskd/taskd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # 3 | # Copyright (C) 2014 NixNodes 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | ######################################################################### 19 | # DO NOT EDIT/REMOVE THESE LINES 20 | #@VERSION:00 21 | #@REVISION:22 22 | #@MACRO:taskd-sha1gen|Generate SHA1 password:{exe} --noglconf -noop --preexec `[ -z "{?Q:(\{arg1\})}" ] && echo "Missing input" && exit 2; echo {?S:(?Q:(\{arg1\}))}` 23 | #@MACRO:taskd|taskd:{exe} -vvvv --user "{?x:(?Q:(\{?d:spec1\}/taskd_server_config)):RUN_USER}" --group "{?x:(?Q:(\{?d:spec1\}/taskd_server_config)):RUN_GROUP}" -netctl "threads_recv={?x:(?Q:(\{?d:spec1\}/taskd_server_config)):NET_THREADS}" -listen "mode=1|log=ge2|{?x:(?Q:(\{?d:spec1\}/taskd_server_config)):NET_OPTIONS}" {?x:(?Q:(\{?d:spec1\}/taskd_server_config)):LISTEN_ADDR} {?x:(?Q:(\{?d:spec1\}/taskd_server_config)):LISTEN_PORT} ( -l: "(?s:(?Q:(\{ge1\}\{ge2\}\{ge3\}\{ge4\}\{ge5\}\{ge6\}\{ge7\}\{ge8\})):ascii)" -match "1" -l: "(?Q:(\{ge1\}\{ge2\}\{ge3\}\{ge4\}\{ge5\}\{ge6\}\{ge7\}\{ge8\}))" ! -regex "[\$\`]" -l: "(?X:(isread):(?Q:(\{?d:spec1\}/taskd_server_config)))" -match "1" -l: "ge8" -regex "^......" -l: "(?S:(ge8))" -regexi "^{?x:(?Q:(\{?d:spec1\}/taskd_server_config)):SHA1_PW}$" ) --maxres 1 -execv `{spec1} {glroot} {exe} {procid} \{u1\} \{u2\} \{ge1\} \{ge2\} \{ge3\} \{ge4\}` --glroot "{glroot}" --noglconf {arg1} 24 | # 25 | ## Offers functionality to processes that would otherwise require higher priviledges. 26 | ## The tasks it does are constricted and injection checks performed against user- 27 | ## specified input. 28 | ## Communicates with other processes via 'taskc.sh' using TCP/IP 29 | # 30 | ## This is meant to run outside the chrooted environment. 31 | # 32 | ######################################################################### 33 | 34 | BASE_PATH=`dirname "${0}"` 35 | GLROOT="${1}" 36 | GLUTIL="${2}" 37 | GL_HOST_PID=${3} 38 | 39 | MODULES=() 40 | 41 | [ -f "${BASE_PATH}/taskd_config" ] && . "${BASE_PATH}/taskd_config" || { 42 | echo "ERROR: ${BASE_PATH}/taskd_config: configuration file missing" 43 | exit 1 44 | } 45 | 46 | . ${BASE_PATH}/../common || { 47 | echo "ERROR: loading '${BASE_PATH}/../common' failed" 48 | exit 2 49 | } 50 | 51 | [ -z "${4}" ] && { 52 | exit 1 53 | } 54 | 55 | ( [ ${4} -gt -1 ] && [ ${4} -lt 128 ] ) || { 56 | echo "ERROR: mode out of range" 57 | exit 1 58 | } 59 | 60 | MODE=${4} 61 | 62 | register_module() 63 | { 64 | MODULES[${1}]="${2}" 65 | } 66 | 67 | version_get() 68 | { 69 | echo hello 70 | } 71 | 72 | check_illegal_string() 73 | { 74 | [ -z "${1}" ] && return 0 75 | echo "${1}" | egrep -q '[^-_.,/()= a-zA-Z0-9]' && { 76 | echo "ERROR: illegal query" 77 | exit 1 78 | } 79 | } 80 | 81 | check_illegal_string "${5}" 82 | check_illegal_string "${6}" 83 | check_illegal_string "${7}" 84 | check_illegal_string "${8}" 85 | 86 | register_module 1 version_get 87 | 88 | for mod in "${BASE_PATH}/${MODULES_PATH}"/${4}*; do 89 | . "${mod}" || { 90 | echo "ERROR: ${mod}: module load failed" 91 | } 92 | done 93 | 94 | [ -z ${MODULES[${MODE}]} ] && { 95 | echo "ERROR: unrecognized query ${MODE}" 96 | exit 1 97 | } 98 | 99 | ${MODULES[${MODE}]} "${5}" "${6}" "${7}" "${8}" 100 | 101 | exit $? -------------------------------------------------------------------------------- /scripts/taskd/taskd_config: -------------------------------------------------------------------------------- 1 | #@REVISION:03 2 | MODULES_PATH=modules 3 | 4 | 5 | ### [ mod_nuke ] ### 6 | 7 | MOD_NUKE_USER=glftpd 8 | MOD_NUKE_MULTIPLIER=3 9 | 10 | ### [ mod_tvrage ] ### 11 | 12 | MOD_TVRAGE_LOG="${GLROOT}/ftp-data/glutil/db/tvrage" 13 | MOD_IMDB_LOG="${GLROOT}/ftp-data/glutil/db/imdb.log" -------------------------------------------------------------------------------- /scripts/taskd/taskd_server_config: -------------------------------------------------------------------------------- 1 | SHA1_PW 7288edd0fc3ffcbe93a0cf06e3568e28521687bc 2 | 3 | LISTEN_ADDR 0.0.0.0 4 | LISTEN_PORT 4411 5 | 6 | NET_THREADS 1 7 | #NET_OPTIONS sslcert=server.cert|sslkey=server.key 8 | 9 | RUN_USER nobody 10 | RUN_GROUP nobody -------------------------------------------------------------------------------- /scripts/tvrage_update_dl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Copyright (C) 2014 NixNodes 4 | # 5 | # This program is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 3 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # This program is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # DO NOT EDIT/REMOVE THESE LINES 19 | #@VERSION:00 20 | #@REVISION:10 21 | # 22 | GLUTIL=/bin/glutil-chroot 23 | TVRAGE_LOG=/ftp-data/glutil/db/tvrage.dlog 24 | # 25 | BASEDIR=`dirname "${0}"` 26 | 27 | [ -f "${BASEDIR}/tvrage_update_dl_config" ] && { 28 | . "${BASEDIR}/tvrage_update_dl_config" 29 | } 30 | 31 | GLROOT="${1}" 32 | 33 | TVRAGE_LOG="${GLROOT}${TVRAGE_LOG}" 34 | 35 | [ -f "${BASEDIR}/common" ] || { 36 | echo "ERROR: ${BASEDIR}/common missing" 37 | exit 1 38 | } 39 | 40 | . "${BASEDIR}/common" 41 | 42 | 43 | I_DIR="${2}" 44 | I_TIME="${3}" 45 | I_SHOWID="${4}" 46 | I_NAME="${5}" 47 | I_LINK="${6}" 48 | I_COUNTRY="${7}" 49 | I_AIRTIME="${8}" 50 | I_AIRDAY="${9}" 51 | I_RUNTIME="${10}" 52 | I_STARTED="${11}" 53 | I_ENDED="${12}" 54 | I_STARTYEAR="${13}" 55 | I_ENDYEAR="${14}" 56 | I_SEASONS="${15}" 57 | I_CLASS="${16}" 58 | I_GENRE="${17}" 59 | I_NETWORK="${18}" 60 | I_STATUS="${19}" 61 | 62 | [ -z "${I_DIR}" ] && exit 1 63 | 64 | try_lock_r 12 tvr_lk "`echo "${TVRAGE_LOG}" | md5sum | cut -d' ' -f1`" 120 "ERROR: could not obtain lock" 65 | 66 | if [ -f "${TVRAGE_LOG}" ]; then 67 | 68 | if ! ${GLUTIL} -e tvrage -ff --silent --tvlog "${TVRAGE_LOG}" --nofq -l: dir ! -match "${I_DIR}" --rev; then 69 | echo "ERROR: -e failed: ${I_DIR}, ${TVRAGE_LOG}" 70 | exit 1 71 | fi 72 | 73 | if ${GLUTIL} -q tvrage --tvlog "${TVRAGE_LOG}" -l: dir -match "${I_DIR}" --rev --silent; then 74 | echo "ERROR: old record still exists: ${I_DIR}, ${TVRAGE_LOG}" 75 | exit 1 76 | fi 77 | else 78 | f_create=1 79 | fi 80 | 81 | echo -e "dir ${I_DIR}\ntime ${I_TIME}\nshowid ${I_SHOWID}\nname ${I_NAME}\nlink ${I_LINK}\ncountry ${I_COUNTRY}\nairtime ${I_AIRTIME}\nairday ${I_AIRDAY}\nruntime ${I_RUNTIME}\nstarted ${I_STARTED}\nended ${I_ENDED}\nstartyear ${I_STARTYEAR}\nendyear ${I_ENDYEAR}\nseasons ${I_SEASONS}\nclass ${I_CLASS}\ngenre ${I_GENRE}\nnetwork ${I_NETWORK}\nstatus ${I_STATUS}\n" | 82 | ${GLUTIL} -z tvrage --tvlog "${TVRAGE_LOG}" || { 83 | echo "ERROR: could not write ${TVRAGE_LOG}" 84 | exit 1 85 | } 86 | 87 | [ -n "${f_create}" ] && { 88 | chmod -f 666 "${TVRAGE_LOG}" 89 | touch "${TVRAGE_LOG}.bk" 90 | chmod -f 666 "${TVRAGE_LOG}.bk" 91 | } 92 | 93 | exit 0 -------------------------------------------------------------------------------- /scripts/tvrage_update_dl_config: -------------------------------------------------------------------------------- 1 | GLUTIL=/bin/glutil-chroot 2 | TVRAGE_LOG=/ftp-data/glutil/db/tvrage.dlog -------------------------------------------------------------------------------- /src/Makefile.am: -------------------------------------------------------------------------------- 1 | if ENABLE_PRECHECK_NONCHROOT 2 | PRECHECK_APP = glutil-precheck-nonchroot 3 | endif 4 | 5 | if ENABLE_PRECHECK 6 | PRECHECK_APP = glutil-precheck 7 | endif 8 | 9 | if ENABLE_CHROOT_OWNBIN 10 | GLUTIL_APP = glutil-chroot 11 | endif 12 | 13 | if ENABLE_SEARCHBIN 14 | GLUTIL_APP = gfind 15 | else 16 | GLUTIL_APP = glutil 17 | endif 18 | 19 | if ENABLE_ARM 20 | SHM_SRC = 21 | X64_LD = 22 | else 23 | SHM_SRC = log_shm.c 24 | X64_LD = -lrt -lm 25 | endif 26 | 27 | bin_PROGRAMS=$(GLUTIL_APP) $(PRECHECK_APP) 28 | 29 | if ENABLE_NET_SUBSYS 30 | GLUTIL_DEFAULTSRC=signal.c g_help.c memory.c hasht.c thread.c arg_opts.c init.c main.c macros.c l_error.c errno_int.c str.c time.c misc.c lc_oper.c x_f.c taskd.c net_io.c net_proto.c net_gfs.c net_fs.c net_dis.c net_cmdproc.c net_ftp.c net_fsjproc.c glutil_net.c g_crypto.c log_io.c $(SHM_SRC) gv_off.c cfgv.c m_general.c sort.c m_string.c lref_glob.c m_lom.c i_math.c arg_proc.c exech.c exec.c base64.c xref.c lref.c lref_generic.c lref_dirlog.c lref_nukelog.c lref_dupefile.c lref_lastonlog.c lref_onliners.c lref_online.c lref_imdb.c lref_imdb_old.c lref_tvrage.c lref_game.c lref_gen1.c lref_gen2.c lref_gen3.c lref_gen4.c lref_sconf.c lref_gconf.c lref_altlog.c log_op.c omfp.c dirlog.c 31 | else 32 | if ENABLE_CRYPTO 33 | GLUTIL_DEFAULTSRC=signal.c g_help.c memory.c hasht.c arg_opts.c init.c main.c macros.c l_error.c errno_int.c str.c time.c misc.c lc_oper.c x_f.c log_io.c $(SHM_SRC) gv_off.c cfgv.c m_general.c sort.c m_string.c g_crypto.c lref_glob.c m_lom.c i_math.c arg_proc.c exech.c exec.c base64.c xref.c lref.c lref_generic.c lref_dirlog.c lref_nukelog.c lref_dupefile.c lref_lastonlog.c lref_onliners.c lref_online.c lref_imdb.c lref_imdb_old.c lref_tvrage.c lref_game.c lref_gen1.c lref_gen2.c lref_gen3.c lref_gen4.c lref_sconf.c lref_gconf.c lref_altlog.c log_op.c omfp.c dirlog.c 34 | else 35 | GLUTIL_DEFAULTSRC=signal.c g_help.c memory.c hasht.c arg_opts.c init.c main.c macros.c l_error.c errno_int.c str.c time.c misc.c lc_oper.c x_f.c log_io.c $(SHM_SRC) gv_off.c cfgv.c m_general.c sort.c m_string.c lref_glob.c m_lom.c i_math.c arg_proc.c exech.c exec.c base64.c xref.c lref.c lref_generic.c lref_dirlog.c lref_nukelog.c lref_dupefile.c lref_lastonlog.c lref_onliners.c lref_online.c lref_imdb.c lref_imdb_old.c lref_tvrage.c lref_game.c lref_gen1.c lref_gen2.c lref_gen3.c lref_gen4.c lref_sconf.c lref_gconf.c lref_altlog.c log_op.c omfp.c dirlog.c 36 | endif 37 | endif 38 | 39 | GLUTIL_PRECHECK_SRC=pce/pce_signal.c g_help.c memory.c hasht.c pce/pce_init.c macros.c l_error.c errno_int.c str.c time.c misc.c lc_oper.c x_f.c log_io.c $(SHM_SRC) gv_off.c cfgv.c m_general.c sort.c m_string.c lref_glob.c m_lom.c i_math.c arg_proc.c exech.c exec.c base64.c xref.c lref.c lref_generic.c lref_online.c lref_imdb.c lref_imdb_old.c lref_tvrage.c lref_game.c lref_sconf.c lref_gconf.c log_op.c omfp.c pce/pce_proc.c pce/pce_misc.c 40 | 41 | glutil_SOURCES=$(GLUTIL_DEFAULTSRC) 42 | glutil_chroot_SOURCES=$(GLUTIL_DEFAULTSRC) 43 | glutil_precheck_SOURCES=$(GLUTIL_PRECHECK_SRC) 44 | glutil_precheck_nonchroot_SOURCES=$(GLUTIL_PRECHECK_SRC) 45 | 46 | if ENABLE_CRYPTO 47 | gfind_SOURCES=signal.c g_help.c memory.c hasht.c arg_opts.c init.c main.c macros.c l_error.c errno_int.c str.c time.c misc.c lc_oper.c x_f.c log_io.c $(SHM_SRC) gv_off.c cfgv.c m_general.c sort.c m_string.c g_crypto.c lref_glob.c m_lom.c i_math.c arg_proc.c exech.c exec.c base64.c xref.c lref.c lref_generic.c log_op.c omfp.c 48 | else 49 | gfind_SOURCES=signal.c g_help.c memory.c hasht.c arg_opts.c init.c main.c macros.c l_error.c errno_int.c str.c time.c misc.c lc_oper.c x_f.c log_io.c $(SHM_SRC) gv_off.c cfgv.c m_general.c sort.c m_string.c lref_glob.c m_lom.c i_math.c arg_proc.c exech.c exec.c base64.c xref.c lref.c lref_generic.c log_op.c omfp.c 50 | endif 51 | 52 | GLUTIL_DEFAULTLN= 53 | 54 | glutil_LDADD=$(GLUTIL_DEFAULTLN) $(X64_LD) 55 | glutil_chroot_LDADD=$(GLUTIL_DEFAULTLN) $(X64_LD) 56 | glutil_precheck_LDADD=$(GLUTIL_DEFAULTLN) $(X64_LD) 57 | glutil_precheck_nonchroot_LDADD=$(GLUTIL_DEFAULTLN) $(X64_LD) 58 | gfind_LDADD=$(GLUTIL_DEFAULTLN) $(X64_LD) 59 | 60 | AM_CPPFLAGS=-DGIT_SHORTREV=\"`git rev-parse --short=8 HEAD`\" -------------------------------------------------------------------------------- /src/arg_opts.h: -------------------------------------------------------------------------------- 1 | /* 2 | * arg_opts.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef ARG_OPTS_H_ 9 | #define ARG_OPTS_H_ 10 | 11 | #include 12 | 13 | #define AR_VRP_OPT_NEGATE_MATCH 0x1 14 | #define AR_VRP_OPT_TARGET_FD 0x2 15 | #define AR_VRP_OPT_TARGET_LOOKUP 0x3 16 | 17 | typedef int 18 | _aopt (void *arg, int m, void *opt); 19 | 20 | int 21 | print_version_long (void *arg, int m, void *opt); 22 | int 23 | print_help (void *arg, int m, void *opt); 24 | 25 | int 26 | opt_g_stdout_lvl (void *arg, int m, void *opt); 27 | 28 | _aopt opt_rec_upd_records, opt_dirlog_rb_full, opt_glroot; 29 | 30 | #endif /* ARG_OPTS_H_ */ 31 | -------------------------------------------------------------------------------- /src/arg_proc.h: -------------------------------------------------------------------------------- 1 | /* 2 | * arg_proc.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef ARG_PROC_H_ 9 | #define ARG_PROC_H_ 10 | 11 | #include 12 | 13 | #include 14 | 15 | typedef int 16 | (*__opt_cptr) (void *arg, int m, void *opt); 17 | 18 | #define F_PARSE_ARG_IGNORE_ERRORS (a32 << 1) 19 | #define F_PARSE_ARG_SILENT (a32 << 2) 20 | #define F_PARSE_ARG_IGNORE_NOT_FOUND (a32 << 3) 21 | #define F_PARSE_ARG_BREAK_NOT_FOUND (a32 << 4) 22 | 23 | typedef struct ___gg_opt 24 | { 25 | uint32_t id; 26 | char *on; // option name 27 | uint8_t ac; // arg count 28 | __opt_cptr op; // option proc funct 29 | } _gg_opt, *__gg_opt; 30 | 31 | typedef struct ___opt_dbent 32 | { 33 | _gg_opt opt; 34 | uint16_t l; 35 | void *n_dbent; 36 | } _o_dbent, *__o_dbent; 37 | 38 | typedef struct ___g_vop 39 | { 40 | uint8_t ac_s; 41 | } _g_vop, *__g_vop; 42 | 43 | void * 44 | g_pg (void *arg, int m); 45 | char * 46 | g_pd (void *arg, int m, size_t l); 47 | int 48 | g_cpg (void *arg, void *out, int m, size_t sz); 49 | 50 | char ** 51 | build_argv (char *args, size_t max, int *c); 52 | int 53 | opt_execv_stdout_rd (void *arg, int m, void *opt); 54 | int 55 | parse_args (int argc, char **argv, _gg_opt fref_t[], char ***la, uint32_t flags); 56 | 57 | int 58 | register_option (__opt_cptr func, uint8_t argc, char *match, __o_dbent pe); 59 | __gg_opt 60 | proc_option (char *option); 61 | int 62 | parse_args_n (int argc, char **argv, _gg_opt fref_t[], char ***la, 63 | uint32_t flags); 64 | 65 | int 66 | default_determine_negated (void); 67 | 68 | typedef struct option_reference_array 69 | { 70 | char *option; 71 | void *function, *arg_cnt; 72 | }*p_ora; 73 | 74 | #define O_FI_STDIN(arg, m, code, code2) { \ 75 | b_in = g_pg(arg, m); \ 76 | if (NULL == b_in) { \ 77 | return code; \ 78 | } \ 79 | if (b_in[0] == 0x2D) \ 80 | { \ 81 | fh_in = stdin; \ 82 | fn_in = NULL; \ 83 | } \ 84 | else \ 85 | { \ 86 | if (check_path(b_in) == -1) \ 87 | { \ 88 | print_str("ERROR: could not open '%s' [%s]\n", b_in, strerror(errno)); \ 89 | return code2; \ 90 | } \ 91 | fn_in = b_in; \ 92 | fh_in = NULL; \ 93 | } \ 94 | } 95 | 96 | _gg_opt gg_f_ref[1024]; 97 | _gg_opt gg_prio_f_ref[128]; 98 | 99 | _o_dbent glob_dbe[UCHAR_MAX]; 100 | 101 | typedef struct ___ar_vrp 102 | { 103 | int ttl; 104 | uint32_t opt; 105 | void *arg; 106 | } _ar_vrp, *__ar_vrp; 107 | 108 | __ar_vrp 109 | ar_find (pmda md, uint32_t opt); 110 | __ar_vrp 111 | ar_add (pmda md, uint32_t opt, int ttl, void *arg); 112 | void 113 | ar_mod_ttl (pmda md, int by); 114 | int 115 | ar_remove (pmda md, uint32_t opt); 116 | 117 | #include 118 | 119 | mda ar_vref; 120 | 121 | #define P_OPT_DL_O 0x7C 122 | #define P_OPT_DL_V 0x3D 123 | 124 | typedef int 125 | (*_p_opt_cb) (pmda opt, void *arg); 126 | 127 | int 128 | g_parse_opts (char *input, _p_opt_cb _proc, void *arg, int dl_o, int dl_v); 129 | 130 | #endif /* ARG_PROC_H_ */ 131 | -------------------------------------------------------------------------------- /src/base64.h: -------------------------------------------------------------------------------- 1 | /* 2 | * base64.h 3 | * 4 | * Created on: Mar 6, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SRC_BASE64_H_ 9 | #define SRC_BASE64_H_ 10 | 11 | int 12 | base64_encode (unsigned char *source, unsigned int sourcelen, char *target, 13 | unsigned int targetlen); 14 | unsigned int 15 | base64_decode (char *source, unsigned char *target, unsigned int targetlen); 16 | 17 | #endif /* SRC_BASE64_H_ */ 18 | -------------------------------------------------------------------------------- /src/cfgv.h: -------------------------------------------------------------------------------- 1 | /* 2 | * cfgv.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef CFGV_H_ 9 | #define CFGV_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | #include 17 | 18 | #define F_CFGV_BUILD_FULL_STRING (a32 << 1) 19 | #define F_CFGV_RETURN_MDA_OBJECT (a32 << 2) 20 | #define F_CFGV_RETURN_TOKEN_EX (a32 << 3) 21 | #define F_CFGV_BUILD_DATA_PATH (a32 << 10) 22 | 23 | #define F_CFGV_MODES (F_CFGV_BUILD_FULL_STRING|F_CFGV_RETURN_MDA_OBJECT|F_CFGV_RETURN_TOKEN_EX) 24 | 25 | #define MAX_CFGV_RES_LENGTH 50000 26 | 27 | #define LCFG_MAX_LOADED 0x200 28 | #define LCFG_MAX_LOAD_LINES 10000 29 | #define LCFG_MAX_LINE_SIZE 16384 30 | 31 | #define F_LCONF_NORF 0x1 32 | #define MSG_INIT_PATH_OVERR "NOTICE: %s path set to '%s'\n" 33 | #define MSG_INIT_CMDLINE_ERROR "ERROR: [%d] processing command line arguments failed\n" 34 | 35 | typedef struct g_cfg_ref 36 | { 37 | mda cfg; 38 | char file[PATH_MAX]; 39 | } cfg_r, *p_cfg_r; 40 | 41 | typedef struct config_header 42 | { 43 | char *key, *value; 44 | mda data; 45 | } cfg_h, *p_cfg_h; 46 | 47 | char * 48 | g_rtval_ex (char *arg, char *match, size_t max_size, char *output, 49 | uint32_t flags); 50 | void * 51 | ref_to_val_get_cfgval (char *cfg, char *key, char *defpath, int flags, 52 | char *out, size_t max); 53 | 54 | int 55 | load_cfg (pmda pmd, char *file, uint32_t flags, pmda *res); 56 | void 57 | free_cfg (pmda md); 58 | p_md_obj 59 | get_cfg_opt (char *key, pmda md, pmda *ret); 60 | 61 | __d_cfg search_cfg_rf, register_cfg_rf; 62 | 63 | int 64 | free_cfg_rf (pmda md); 65 | 66 | #endif /* CFGV_H_ */ 67 | -------------------------------------------------------------------------------- /src/config.h: -------------------------------------------------------------------------------- 1 | /* 2 | * config.h 3 | * 4 | * Created on: Dec 10, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef CONFIG_H_ 9 | #define CONFIG_H_ 10 | 11 | #ifndef CONF_PREFIX 12 | #define CONF_PREFIX "/glftpd" 13 | #endif 14 | 15 | /* gl root */ 16 | #ifndef glroot 17 | #define glroot CONF_PREFIX 18 | #endif 19 | 20 | /* site root, relative to gl root */ 21 | #ifndef siteroot 22 | #define siteroot "/site" 23 | #endif 24 | 25 | /* ftp-data, relative to gl root */ 26 | #ifndef ftp_data 27 | #define ftp_data "/ftp-data" 28 | #endif 29 | 30 | /* glftpd's user segment ipc key */ 31 | #ifndef shm_ipc 32 | #define shm_ipc 0x0000DEAD 33 | #endif 34 | 35 | /* glutil data buffers ipc keys */ 36 | #define IPC_KEY_DIRLOG 0xDEAD1000 37 | #define IPC_KEY_NUKELOG 0xDEAD1100 38 | #define IPC_KEY_DUPEFILE 0xDEAD1200 39 | #define IPC_KEY_LASTONLOG 0xDEAD1300 40 | #define IPC_KEY_ONELINERS 0xDEAD1400 41 | #define IPC_KEY_IMDBLOG_O 0xDEAD1500 42 | #define IPC_KEY_IMDBLOG 0xDEAD1510 43 | #define IPC_KEY_GAMELOG 0xDEAD1600 44 | #define IPC_KEY_TVRAGELOG 0xDEAD1700 45 | #define IPC_KEY_GEN1LOG 0xDEAD1800 46 | #define IPC_KEY_GEN2LOG 0xDEAD1900 47 | #define IPC_KEY_GEN3LOG 0xDEAD2000 48 | #define IPC_KEY_GEN4LOG 0xDEAD2100 49 | #define IPC_KEY_SCONFLOG 0xDEAD2200 50 | #define IPC_KEY_GCONFLOG 0xDEAD2300 51 | #define IPC_KEY_ALTLOG 0xDEAD2400 52 | #define IPC_KEY_X 0xDEAD2500 53 | 54 | /* 55 | * log file path 56 | * setting this variable enables logging (default is off) 57 | */ 58 | #ifndef log_file 59 | #define log_file "" 60 | #endif 61 | 62 | /* dirlog file path */ 63 | #ifndef dir_log 64 | #define dir_log CONF_PREFIX "/ftp-data/logs/dirlog" 65 | #endif 66 | 67 | /* nukelog file path */ 68 | #ifndef nuke_log 69 | #define nuke_log CONF_PREFIX "/ftp-data/logs/nukelog" 70 | #endif 71 | 72 | /* dupe file path */ 73 | #ifndef dupe_file 74 | #define dupe_file CONF_PREFIX "/ftp-data/logs/dupefile" 75 | #endif 76 | 77 | /* last-on log file path */ 78 | #ifndef last_on_log 79 | #define last_on_log CONF_PREFIX "/ftp-data/logs/laston.log" 80 | #endif 81 | 82 | /* oneliner file path */ 83 | #ifndef oneliner_file 84 | #define oneliner_file CONF_PREFIX "/ftp-data/logs/oneliners.log" 85 | #endif 86 | 87 | /* imdb log file path */ 88 | #ifndef imdb_file 89 | #define imdb_file CONF_PREFIX "/ftp-data/glutil/db/imdb.log" 90 | #endif 91 | 92 | /* old imdb log file path */ 93 | #ifndef imdb_o_file 94 | #define imdb_o_file CONF_PREFIX "/ftp-data/glutil/db/imdb" 95 | #endif 96 | 97 | /* game log file path */ 98 | #ifndef game_log 99 | #define game_log CONF_PREFIX "/ftp-data/glutil/db/game" 100 | #endif 101 | 102 | /* tv log file path */ 103 | #ifndef tv_log 104 | #define tv_log CONF_PREFIX "/ftp-data/glutil/db/tvrage" 105 | #endif 106 | 107 | /* generic 1 log file path */ 108 | #ifndef ge1_log 109 | #define ge1_log CONF_PREFIX "/ftp-data/logs/gen1.log" 110 | #endif 111 | 112 | /* generic 2 log file path */ 113 | #ifndef ge2_log 114 | #define ge2_log CONF_PREFIX "/ftp-data/logs/gen2.log" 115 | #endif 116 | 117 | /* generic 3 log file path */ 118 | #ifndef ge3_log 119 | #define ge3_log CONF_PREFIX "/ftp-data/logs/gen3.log" 120 | #endif 121 | 122 | /* generic 4 log file path */ 123 | #ifndef ge4_log 124 | #define ge4_log CONF_PREFIX "/ftp-data/logs/gen4.log" 125 | #endif 126 | 127 | /* precheck global config */ 128 | 129 | #ifndef gconf_log 130 | #define gconf_log CONF_PREFIX "/ftp-data/glutil/precheck-data/gconf" 131 | #endif 132 | 133 | /* alt log */ 134 | 135 | #ifndef alt_log 136 | #define alt_log CONF_PREFIX "/ftp-data/logs/altlog" 137 | #endif 138 | 139 | /* filesystem shadow log */ 140 | 141 | #ifndef x_log 142 | #define x_log "stdin" 143 | #endif 144 | 145 | /* see MANUAL */ 146 | #ifndef du_fld 147 | #define du_fld CONF_PREFIX "/bin/glutil.folders" 148 | #endif 149 | 150 | /* file extensions to skip generating crc32 (SFV mode)*/ 151 | #ifndef PREG_SFV_SKIP_EXT 152 | #define PREG_SFV_SKIP_EXT "\\.(nfo|sfv(\\.tmp|))$" 153 | #endif 154 | 155 | #endif /* CONFIG_H_ */ 156 | -------------------------------------------------------------------------------- /src/dirlog.h: -------------------------------------------------------------------------------- 1 | /* 2 | * dirlog.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef DIRLOG_H_ 9 | #define DIRLOG_H_ 10 | 11 | #define MSG_PS_UWSFV "WARNING: %s: unable to wipe temp. SFV file (remove it manually)\n" 12 | 13 | #define MAX_WBUFFER_HOLD 100000 14 | 15 | #include 16 | #include 17 | 18 | #include 19 | 20 | typedef struct e_arg 21 | { 22 | int depth; 23 | uint32_t flags; 24 | char buffer[PATH_MAX]; 25 | char buffer2[PATH_MAX + 10]; 26 | struct dirlog *dirlog; 27 | time_t t_stor; 28 | __g_eds eds; 29 | } ear; 30 | 31 | #define F_EARG_SFV (a32 << 1) 32 | #define F_EAR_NOVERB (a32 << 2) 33 | 34 | #define F_PS_STOP_TRAVERSE ((uint8_t)1 << 1) 35 | 36 | #define MAX_BWHOLD_BYTES_DL 524288 * 2 37 | 38 | int 39 | update_records (char *dirname, int depth); 40 | int 41 | proc_directory (char *name, unsigned char type, void *arg, __g_eds eds); 42 | int 43 | rebuild_dirlog (void); 44 | int 45 | proc_section (char *name, unsigned char type, void *arg, __g_eds eds); 46 | 47 | typedef uint64_t 48 | __d_dlfind (char *, int, uint32_t, void *); 49 | 50 | __d_dlfind dirlog_find, dirlog_find_old, dirlog_find_simple; 51 | 52 | int 53 | release_generate_block (char *name, ear *iarg); 54 | 55 | int 56 | dirlog_write_record (struct dirlog *buffer, off_t offset, int whence); 57 | int 58 | get_relative_path (char *subject, char *root, char *output); 59 | char* 60 | get_relative_path_n (char *subject, char *root); 61 | uint64_t 62 | nukelog_find (char *dirn, int mode, struct nukelog *output); 63 | int 64 | dirlog_check_records (void); 65 | int 66 | dirlog_update_record (char *argv); 67 | int 68 | dirlog_check_dupe (void); 69 | 70 | typedef p_md_obj 71 | (*df_func) (void *, uint32_t, void *); 72 | 73 | p_md_obj 74 | dirlog_find_a (void *, uint32_t, void *); 75 | p_md_obj 76 | dirlog_find_ht (void *, uint32_t, void *); 77 | 78 | #endif /* DIRLOG_H_ */ 79 | -------------------------------------------------------------------------------- /src/errno_int.c: -------------------------------------------------------------------------------- 1 | /* 2 | * errno_int.c 3 | * 4 | * Created on: Jul 21, 2014 5 | * Author: reboot 6 | */ 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | 13 | #include "errno_int.h" 14 | 15 | char erm_buf[2048] = 16 | { 0 }; 17 | 18 | _emr EMR_enum_dir[] = 19 | { 20 | { .code = -2, .err_msg = _E_MSG_ED_ODFAIL, .has_errno = 1 }, 21 | { .code = -3, .err_msg = _E_MSG_ED_ESD_LSTAT, .has_errno = 1 }, 22 | { .code = -4, .err_msg = _E_MSG_ED_ESD_DIRFD, .has_errno = 1 }, 23 | { .code = 0, .err_msg = _E_MSG_ED_DEF, .has_errno = 0 } }; 24 | 25 | char * 26 | ie_tl (int code, __emr pemr) 27 | { 28 | int i; 29 | 30 | for (i = 0; i < _E_MAX_MMB; i++) 31 | { 32 | if (pemr[i].code == code || 0 == pemr[i].code) 33 | { 34 | if (0 != pemr[i].has_errno) 35 | { 36 | snprintf (erm_buf, sizeof(erm_buf), "%s [%s]", pemr[i].err_msg, 37 | strerror (errno)); 38 | return erm_buf; 39 | } 40 | return pemr[i].err_msg; 41 | } 42 | } 43 | 44 | return _E_MSG_DEFAULT; 45 | } 46 | 47 | char * 48 | g_strerr_r (int errnum, char *buf, size_t buflen) 49 | { 50 | #if ((_POSIX_VERSION == 200112L || _XOPEN_VERSION >= 600) && __FreeBSD__) || H_ISARM 51 | int ret = strerror_r(errnum, buf, buflen); 52 | if (0 != ret) 53 | { 54 | snprintf(buf, buflen, "int: strerror_r failure"); 55 | } 56 | return buf; 57 | #else 58 | return strerror_r (errnum, buf, buflen); 59 | #endif 60 | } 61 | -------------------------------------------------------------------------------- /src/errno_int.h: -------------------------------------------------------------------------------- 1 | /* 2 | * errno_int.h 3 | * 4 | * Created on: Jul 21, 2014 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef ERRNO_INT_H_ 9 | #define ERRNO_INT_H_ 10 | 11 | typedef struct errno_msg_ref 12 | { 13 | int code; 14 | char *err_msg; 15 | int has_errno; 16 | } _emr, *__emr; 17 | 18 | #define _E_MAX_MMB 8192 19 | 20 | #define _E_MSG_DEFAULT "an unknown error has occured" 21 | 22 | #define _E_MSG_DEF_BNW "could not open file for writing" 23 | #define _E_MSG_DEF_WF "write failed" 24 | #define _E_MSG_DEF_CC " (compressed)" 25 | 26 | #define _E_MSG_ED_DEF "directory enumeration failed" 27 | #define _E_MSG_ED_ODFAIL "could not open a directory stream" 28 | #define _E_MSG_ED_ESD_LSTAT "could not get directory status (fstat)" 29 | #define _E_MSG_ED_ESD_DIRFD "could not get directory stream file descriptor" 30 | 31 | char erm_buf[2048]; 32 | 33 | char * 34 | ie_tl (int code, __emr pemr); 35 | 36 | _emr EMR_enum_dir[4]; 37 | 38 | #include 39 | 40 | 41 | char * 42 | g_strerr_r (int errnum, char *buf, size_t buflen); 43 | 44 | #endif /* ERRNO_INT_H_ */ 45 | -------------------------------------------------------------------------------- /src/exec_t.h: -------------------------------------------------------------------------------- 1 | /* 2 | * exec.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef EXEC_H_ 9 | #define EXEC_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | typedef struct ___d_argv_ch 18 | { 19 | int cindex; 20 | mda mech; 21 | } _d_argv_ch, *__d_argv_ch; 22 | 23 | int 24 | g_build_argv_c (__g_handle hdl); 25 | 26 | int 27 | g_do_exec_v (void *buffer, void *callback, char *ex_str, void * p_hdl); 28 | int 29 | process_execv_args (void *data, __g_handle hdl); 30 | int 31 | process_execv_args_bare (void *data, __g_handle hdl, __execv exec_args); 32 | 33 | int 34 | l_execv (char *exec, char **argv, __g_handle hdl); 35 | _d_wpid_cb l_waitpid_def; 36 | 37 | void 38 | l_post_exec_cleanup (__g_handle hdl); 39 | 40 | char *exec_str; 41 | char **exec_v; 42 | int exec_vc; 43 | 44 | int 45 | g_do_exec_fb (void *buffer, void *callback, char *ex_str, void *hdl); 46 | 47 | __d_exec exc; 48 | 49 | long amax; 50 | 51 | int 52 | opt_execv (void *arg, int m, void *opt); 53 | int 54 | opt_execv_stdin (void *arg, int m, void *opt); 55 | 56 | int 57 | process_exec_string (char *input, char *output, size_t max_size, void *callback, 58 | void *data); 59 | int 60 | g_do_exec (void *buffer, void *callback, char *ex_str, void *hdl); 61 | 62 | int 63 | g_init_execv_bare (__execv exec_args, __g_handle hdl, char *i_exec_str); 64 | int 65 | g_build_argv_c_bare (__execv exec_args, __g_handle hdl); 66 | int 67 | process_exec_string_n (char *input, char *output, size_t max_size, 68 | _d_rtv_lk callback, void *data, void *mppd); 69 | 70 | #endif /* EXEC_H_ */ 71 | -------------------------------------------------------------------------------- /src/exech.c: -------------------------------------------------------------------------------- 1 | /* 2 | * exech.c 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #include 9 | #include 10 | 11 | #include 12 | 13 | int 14 | g_compile_exech (pmda mech, __g_handle hdl, char *instr) 15 | { 16 | size_t pl, p1, vl1; 17 | char *in_ptr = instr; 18 | 19 | if (!in_ptr[0]) 20 | { 21 | return 2600; 22 | } 23 | 24 | md_init (mech, 16); 25 | __d_exec_ch ptr = md_alloc (mech, sizeof(_d_exec_ch)); 26 | 27 | if (!ptr) 28 | { 29 | return 2601; 30 | } 31 | 32 | ptr->st_ptr = in_ptr; 33 | 34 | if (hdl->g_proc1_lookup) 35 | { 36 | for (p1 = 0, pl = 0; in_ptr[0]; p1++, in_ptr++, pl++) 37 | { 38 | if (pl > 0 && in_ptr[-1] == 0x5C) 39 | { 40 | continue; 41 | } 42 | if (in_ptr[0] == 0x7B) 43 | { 44 | ptr->len = pl; 45 | pl = 0; 46 | ptr = md_alloc (mech, sizeof(_d_exec_ch)); 47 | if (!ptr) 48 | { 49 | return 2602; 50 | } 51 | 52 | do_gcb: ; 53 | 54 | in_ptr++; 55 | ptr->st_ptr = in_ptr; 56 | ptr->dtr.hdl = hdl; 57 | vl1 = 0; 58 | 59 | ptr->callback = hdl->g_proc1_lookup (hdl->_x_ref, ptr->st_ptr, 60 | NULL, 61 | 0, &ptr->dtr); 62 | if (!ptr->callback) 63 | { 64 | return 2603; 65 | } 66 | 67 | while (((in_ptr[0] != 0x7D) || in_ptr[-1] == 0x5C) && in_ptr[0]) 68 | { 69 | 70 | in_ptr++; 71 | vl1++; 72 | } 73 | if (!in_ptr[0]) 74 | { 75 | return 2604; 76 | } 77 | 78 | if (in_ptr[0] != 0x7D) 79 | { 80 | return 2605; 81 | } 82 | 83 | ptr->len = vl1; 84 | ptr = md_alloc (mech, sizeof(_d_exec_ch)); 85 | if (!ptr) 86 | { 87 | return 2606; 88 | } 89 | 90 | if (in_ptr[1] && ((in_ptr[1] == 0x7B) && in_ptr[0] != 0x5C)) 91 | { 92 | in_ptr++; 93 | goto do_gcb; 94 | } 95 | else 96 | { 97 | in_ptr++; 98 | ptr->st_ptr = in_ptr; 99 | } 100 | 101 | if (!in_ptr[0]) 102 | { 103 | break; 104 | } 105 | } 106 | } 107 | 108 | ptr->len = pl; 109 | } 110 | else 111 | { 112 | ptr->len = strlen (ptr->st_ptr); 113 | } 114 | 115 | return 0; 116 | 117 | } 118 | 119 | size_t 120 | g_exech_build_string (void *d_ptr, pmda mech, __g_handle hdl, char *output, 121 | size_t maxlen) 122 | { 123 | p_md_obj ptr = md_first (mech); 124 | __d_exec_ch ch_ptr; 125 | 126 | size_t cw = 0; 127 | 128 | while (ptr) 129 | { 130 | ch_ptr = (__d_exec_ch ) ptr->ptr; 131 | if (NULL == ch_ptr->callback) 132 | { 133 | if (!ch_ptr->len) 134 | { 135 | goto end_l; 136 | } 137 | if (cw + ch_ptr->len >= maxlen) 138 | { 139 | print_str (M_EXECH_DCNBT, hdl->file); 140 | return -1; 141 | } 142 | strncpy (output, ch_ptr->st_ptr, ch_ptr->len); 143 | output += ch_ptr->len; 144 | cw += ch_ptr->len; 145 | } 146 | else 147 | { 148 | char *rs_ptr = ch_ptr->callback (d_ptr, ch_ptr->st_ptr, hdl->mv1_b, 149 | MAX_VAR_LEN, 150 | &ch_ptr->dtr); 151 | if (rs_ptr) 152 | { 153 | size_t rs_len = strlen (rs_ptr); 154 | if (cw + rs_len >= maxlen) 155 | { 156 | print_str (M_EXECH_DCNBT, hdl->file); 157 | return -1; 158 | } 159 | if (!rs_len) 160 | { 161 | goto end_l; 162 | } 163 | strncpy (output, rs_ptr, rs_len); 164 | output += rs_len; 165 | cw += rs_len; 166 | } 167 | } 168 | end_l: 169 | 170 | ptr = ptr->next; 171 | } 172 | output[0] = 0x0; 173 | return cw; 174 | } 175 | 176 | -------------------------------------------------------------------------------- /src/exech.h: -------------------------------------------------------------------------------- 1 | /* 2 | * exech.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef EXECH_H_ 9 | #define EXECH_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | #include 17 | 18 | #define MAX_EXEC_VAR_NAME_LEN 64 19 | 20 | #define M_EXECH_DCNBT "ERROR: %s: could not build exec string, output too large\n" 21 | 22 | typedef struct ___d_exec_ch 23 | { 24 | char *st_ptr; 25 | size_t len; 26 | __g_proc_v callback; 27 | _d_drt_h dtr; 28 | } _d_exec_ch, *__d_exec_ch; 29 | 30 | int 31 | g_compile_exech (pmda mech, __g_handle hdl, char *instr); 32 | size_t 33 | g_exech_build_string (void *d_ptr, pmda mech, __g_handle hdl, char *outstr, 34 | size_t maxlen); 35 | 36 | #endif /* EXECH_H_ */ 37 | -------------------------------------------------------------------------------- /src/fp_types.h: -------------------------------------------------------------------------------- 1 | /* 2 | * fp_types.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef FP_TYPES_H_ 9 | #define FP_TYPES_H_ 10 | 11 | #include 12 | #include 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | #define MAX_VAR_LEN 4096 * 8 19 | 20 | /* generic types */ 21 | 22 | typedef int 23 | _d_achar_i (char *); 24 | typedef int 25 | (*__d_avoidp_i) (void *); 26 | typedef int 27 | * 28 | _d_avoidp_i (void *); 29 | typedef char * 30 | _d_achar_p (char *); 31 | typedef int 32 | _d_avoid_i (void); 33 | typedef int 34 | (*__d_avoid_i) (void); 35 | typedef int 36 | _d_is_am (char in_c); 37 | typedef int 38 | (*__d_is_am) (uint8_t in_c); 39 | typedef int 40 | (*__d_is_wb) (int, char*, size_t, void*); 41 | 42 | /* specific types */ 43 | 44 | typedef int 45 | __d_ref_to_val (void *, char *, char *, size_t, void *mppd); 46 | typedef int 47 | __d_format_block (void *, char *); 48 | typedef pmda 49 | __d_cfg (pmda md, char * file); 50 | typedef int 51 | __d_mlref (void *buffer, char *key, char *val); 52 | typedef uint64_t 53 | __g_t_ptr (void *base, size_t offset); 54 | typedef void * 55 | __d_ref_to_pval (void *arg, char *match, int *output); 56 | typedef char * 57 | __g_proc_rv (void *arg, char *match, char *output, size_t max_size, void *mppd); 58 | typedef void * 59 | _d_rtv_lk (void *arg, char *match, char *output, size_t max_size, void *mppd); 60 | typedef void 61 | _d_omfp_fp (void *hdl, void *ptr, char *sbuffer); 62 | typedef int64_t 63 | g_sint_p (void *base, size_t offset); 64 | typedef void * 65 | (*__g_proc_v) (void *, char *, char *, size_t, void *); 66 | typedef void 67 | (*__g_ipcbm) (void *hdl, pmda md, int *r_p, void *ptr); 68 | typedef int 69 | (*__g_proc_t) (void *, char *, char *, size_t); 70 | typedef void * 71 | (*__d_ref_to_pv) (void *arg, char *match, int *output); 72 | typedef void 73 | (*_d_omfp) (void *hdl, void *ptr, char *sbuffer); 74 | typedef int 75 | (*_d_proc3) (void *, char *); 76 | typedef int 77 | (*_d_gcb_pp_hook) (void *, void *hdl); 78 | typedef int 79 | (*_d_enuml) (void *hdl, void *ptr, void *buffer); 80 | 81 | typedef int 82 | (*__d_wpid_cb) (pid_t, void*); 83 | typedef int 84 | _d_wpid_cb (int, void*); 85 | 86 | #endif /* FP_TYPES_H_ */ 87 | -------------------------------------------------------------------------------- /src/g_conf.h: -------------------------------------------------------------------------------- 1 | /* 2 | * g_conf.h 3 | * 4 | * Created on: Dec 6, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef G_CONF_H_ 9 | #define G_CONF_H_ 10 | 11 | #ifndef PACKAGE_NAME 12 | #define PACKAGE_NAME "glutil" 13 | #endif 14 | 15 | #endif /* G_CONF_H_ */ 16 | -------------------------------------------------------------------------------- /src/g_crypto.c: -------------------------------------------------------------------------------- 1 | /* 2 | * g_crypto.c 3 | * 4 | * Created on: Nov 27, 2014 5 | * Author: reboot 6 | */ 7 | 8 | #include "g_crypto.h" 9 | 10 | #include 11 | 12 | _pid_sha1 13 | c_get_file_sha1 (char *path) 14 | { 15 | _pid_sha1 digest = 16 | { 17 | { 0 } }; 18 | 19 | FILE *fh = fopen (path, "rb"); 20 | 21 | if (NULL == fh) 22 | { 23 | return digest; 24 | } 25 | 26 | char buffer[(1024 ^ 2)]; 27 | 28 | SHA_CTX context; 29 | 30 | SHA1_Init (&context); 31 | 32 | size_t r; 33 | 34 | while ((r = fread (buffer, sizeof(buffer), 1, fh))) 35 | { 36 | SHA1_Update (&context, buffer, r); 37 | } 38 | 39 | SHA1_Final (digest.data, &context); 40 | 41 | fclose (fh); 42 | 43 | return digest; 44 | } 45 | 46 | size_t 47 | c_get_urandom_bytes (void *out, size_t c, FILE *fh) 48 | { 49 | 50 | if ( NULL == fh) 51 | { 52 | return 0; 53 | } 54 | 55 | size_t r = fread (out, c, 1, fh); 56 | 57 | fclose (fh); 58 | 59 | return r; 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/g_crypto.h: -------------------------------------------------------------------------------- 1 | /* 2 | * g_crypto.h 3 | * 4 | * Created on: Nov 27, 2014 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SRC_G_CRYPTO_H_ 9 | #define SRC_G_CRYPTO_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | #pragma pack(push, 4) 19 | 20 | typedef struct ___pid_sha1 21 | { 22 | unsigned char data[SHA_DIGEST_LENGTH]; 23 | } _pid_sha1, *__pid_sha1; 24 | 25 | typedef struct ___pid_sha224 26 | { 27 | unsigned char data[SHA224_DIGEST_LENGTH]; 28 | } _pid_sha224, *__pid_sha224; 29 | 30 | typedef struct ___pid_sha256 31 | { 32 | unsigned char data[SHA256_DIGEST_LENGTH]; 33 | } _pid_sha256, *__pid_sha256; 34 | 35 | typedef struct ___pid_sha384 36 | { 37 | unsigned char data[SHA384_DIGEST_LENGTH]; 38 | } _pid_sha384, *__pid_sha384; 39 | 40 | typedef struct ___pid_sha512 41 | { 42 | unsigned char data[SHA512_DIGEST_LENGTH]; 43 | } _pid_sha512, *__pid_sha512; 44 | 45 | typedef struct ___pid_md4 46 | { 47 | unsigned char data[MD4_DIGEST_LENGTH]; 48 | } _pid_md4, *__pid_md4; 49 | 50 | typedef struct ___pid_md5 51 | { 52 | unsigned char data[MD5_DIGEST_LENGTH]; 53 | } _pid_md5, *__pid_md5; 54 | 55 | typedef struct ___pid_rmd160 56 | { 57 | unsigned char data[RIPEMD160_DIGEST_LENGTH]; 58 | } _pid_rmd160, *__pid_rmd160; 59 | 60 | #pragma pack(pop) 61 | 62 | _pid_sha1 63 | c_get_file_sha1 (char *path); 64 | 65 | #include 66 | 67 | size_t 68 | c_get_urandom_bytes (void *out, size_t c, FILE *fh ); 69 | 70 | #endif /* SRC_G_CRYPTO_H_ */ 71 | -------------------------------------------------------------------------------- /src/g_help.h: -------------------------------------------------------------------------------- 1 | /* 2 | * g_help.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef G_HELP_H_ 9 | #define G_HELP_H_ 10 | 11 | #define HSTR_GFIND_USAGE "Usage: gfind [options]\n" 12 | #define HSTR_HEADER "glFTPd binary logs utility, version " 13 | 14 | char *hpd_up; 15 | 16 | #endif /* G_HELP_H_ */ 17 | -------------------------------------------------------------------------------- /src/g_modes.h: -------------------------------------------------------------------------------- 1 | /* 2 | * g_modes.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef G_MODES_H_ 9 | #define G_MODES_H_ 10 | 11 | #define UPD_MODE_RECURSIVE 0x1 12 | #define UPD_MODE_SINGLE 0x2 13 | #define UPD_MODE_CHECK 0x3 14 | #define UPD_MODE_DUMP 0x4 15 | #define UPD_MODE_DUMP_NUKE 0x5 16 | #define UPD_MODE_DUPE_CHK 0x6 17 | #define UPD_MODE_REBUILD 0x7 18 | #define UPD_MODE_DUMP_DUPEF 0x8 19 | #define UPD_MODE_DUMP_LON 0x9 20 | #define UPD_MODE_DUMP_ONEL 0xA 21 | #define UPD_MODE_DUMP_ONL 0xB 22 | #define UPD_MODE_NOOP 0xC 23 | #define UPD_MODE_MACRO 0xD 24 | #define UPD_MODE_FORK 0xE 25 | #define UPD_MODE_BACKUP 0xF 26 | #define UPD_MODE_DUMP_USERS 0x10 27 | #define UPD_MODE_DUMP_GRPS 0x11 28 | #define UPD_MODE_DUMP_GEN 0x12 29 | #define UPD_MODE_WRITE 0x13 30 | #define UPD_MODE_DUMP_IMDB 0x14 31 | #define UPD_MODE_DUMP_GAME 0x15 32 | #define UPD_MODE_DUMP_TV 0x16 33 | #define UPD_MODE_DUMP_GENERIC 0x17 34 | #define UPD_MODE_LIST_MACROS 0x18 35 | #define UPD_MODE_NETWORK 0x19 36 | #define UPD_MODE_DUMP_IMDBO 0x20 37 | 38 | #define PRIO_UPD_MODE_MACRO 0x1001 39 | #define PRIO_UPD_MODE_INFO 0x1002 40 | 41 | #endif /* G_MODES_H_ */ 42 | -------------------------------------------------------------------------------- /src/g_types.h: -------------------------------------------------------------------------------- 1 | /* 2 | * g_types.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef G_TYPES_H_ 9 | #define G_TYPES_H_ 10 | 11 | #include 12 | 13 | #endif /* G_TYPES_H_ */ 14 | -------------------------------------------------------------------------------- /src/glc.h: -------------------------------------------------------------------------------- 1 | /* 2 | * glc.h 3 | * 4 | * Created on: Dec 13, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef GLC_H_ 9 | #define GLC_H_ 10 | 11 | #ifndef _G_MODE_GFIND 12 | 13 | #include 14 | 15 | #endif 16 | 17 | #endif /* GLC_H_ */ 18 | -------------------------------------------------------------------------------- /src/glutil.h: -------------------------------------------------------------------------------- 1 | /* 2 | * glutil.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef GLUTIL_H_ 9 | #define GLUTIL_H_ 10 | 11 | #include 12 | 13 | #ifndef _G_MODE_GFIND 14 | 15 | #define DL_SZ sizeof(struct dirlog) 16 | #define NL_SZ sizeof(struct nukelog) 17 | #define DF_SZ sizeof(struct dupefile) 18 | #define LO_SZ sizeof(struct lastonlog) 19 | #define OL_SZ sizeof(struct oneliner) 20 | #define ON_SZ sizeof(struct ONLINE) 21 | 22 | #endif 23 | 24 | #include 25 | #include 26 | 27 | #include "g_conf.h" 28 | #include "t_glob.h" 29 | #include "l_sb.h" 30 | #include "im_hdr.h" 31 | #include "misc.h" 32 | 33 | #define DEFF_DIRLOG "dirlog" 34 | #define DEFF_NUKELOG "nukelog" 35 | #define DEFF_LASTONLOG "laston.log" 36 | #define DEFF_DUPEFILE "dupefile" 37 | #define DEFF_ONELINERS "oneliners.log" 38 | #define DEFF_DULOG "glutil.log" 39 | #define DEFF_IMDB "imdb.log" 40 | #define DEFF_GAMELOG "game.log" 41 | #define DEFF_TV "tv.log" 42 | #define DEFF_GEN1 "gen1.log" 43 | #define DEFF_GEN2 "gen2.log" 44 | #define DEFF_GEN3 "gen3.log" 45 | #define DEFF_GEN4 "gen4.log" 46 | 47 | struct d_stats 48 | { 49 | uint64_t bw, br, rw; 50 | }; 51 | 52 | struct d_stats dl_stats; 53 | struct d_stats nl_stats; 54 | 55 | _g_handle g_act_1; 56 | _g_handle g_act_2; 57 | 58 | mda dirlog_buffer; 59 | mda nukelog_buffer; 60 | 61 | mda glconf; 62 | 63 | int EXITVAL; 64 | 65 | uint64_t loop_max; 66 | 67 | int shmatf; 68 | 69 | char MACRO_ARG1[4096]; 70 | char MACRO_ARG2[4096]; 71 | char MACRO_ARG3[4096]; 72 | 73 | char *g_mroot; 74 | 75 | void *_p_macro_argv; 76 | char **_p_argv; 77 | int _p_macro_argc; 78 | 79 | uint32_t g_sleep; 80 | uint32_t g_usleep; 81 | 82 | void *p_argv_off; 83 | void *prio_argv_off; 84 | 85 | mda cfg_rf; 86 | 87 | uint32_t flags_udcfg; 88 | 89 | off_t max_hits; 90 | off_t max_results; 91 | 92 | int execv_stdout_redir; 93 | int g_regex_flags; 94 | 95 | size_t max_datain_f; 96 | 97 | char infile_p[PATH_MAX]; 98 | char b_glob[MAX_EXEC_STR + 4]; 99 | 100 | off_t max_depth, min_depth; 101 | 102 | _g_handle _dummy_hio; 103 | 104 | int g_shmcflags; 105 | 106 | #define MAX_GLOB_STOR_AR_COUNT 255 107 | 108 | uint64_t glob_ui64_stor[MAX_GLOB_STOR_AR_COUNT]; 109 | int64_t glob_si64_stor[MAX_GLOB_STOR_AR_COUNT]; 110 | float glob_float_stor[MAX_GLOB_STOR_AR_COUNT]; 111 | int64_t glob_curtime; 112 | 113 | char *GLOBAL_PREEXEC; 114 | char *GLOBAL_POSTEXEC; 115 | 116 | char *spec_p1, *spec_p2, *spec_p3, *spec_p4; 117 | 118 | uint32_t g_omfp_sto, g_omfp_suto; 119 | 120 | uint32_t xref_flags; 121 | 122 | char *ht_field; 123 | 124 | #ifdef _G_SSYS_THREAD 125 | 126 | #include 127 | 128 | pthread_mutex_t mutex_glob00; 129 | #endif 130 | 131 | int 132 | g_print_str (const char * volatile buf, ...); 133 | 134 | int 135 | (*__pf_eof) (void *p); 136 | 137 | #include 138 | 139 | int 140 | setup_sighandlers (void); 141 | void 142 | sig_handler (int); 143 | void 144 | child_sig_handler (int, siginfo_t*, void*); 145 | int 146 | g_shutdown (void *arg); 147 | int 148 | g_init (int argc, char **argv, char **l_arg); 149 | void 150 | g_send_gkill (void); 151 | char 152 | g_get_gkill (void); 153 | int 154 | g_setxid (void); 155 | 156 | #endif /* GLUTIL_H_ */ 157 | -------------------------------------------------------------------------------- /src/glutil_net.h: -------------------------------------------------------------------------------- 1 | /* 2 | * glutil_net.h 3 | * 4 | * Created on: Nov 24, 2014 5 | * Author: reboot 6 | */ 7 | #ifndef SRC_GLUTIL_NET_H_ 8 | #define SRC_GLUTIL_NET_H_ 9 | 10 | #include 11 | 12 | #include 13 | 14 | #include 15 | 16 | int 17 | net_deploy (void); 18 | 19 | int 20 | net_baseline_gl_data_in (__sock pso, pmda base, pmda threadr, void *data); 21 | int 22 | net_gl_socket_init0 (__sock pso); 23 | int 24 | net_gl_socket_init1 (__sock pso); 25 | int 26 | net_gl_socket_connect_init1 (__sock pso); 27 | int 28 | net_gl_socket_post_clean (__sock pso); 29 | int 30 | net_gl_socket_pre_clean (__sock pso); 31 | int 32 | net_gl_socket_init1_dc_on_ac (__sock pso); 33 | 34 | int 35 | net_gl_socket_destroy (__sock pso); 36 | 37 | #define F_NETOPT_HUSER (a64 << 1) 38 | #define F_NETOPT_HGROUP (a64 << 2) 39 | #define F_NETOPT_SSLINIT (a64 << 3) 40 | #define F_NETOPT_CHROOT (a64 << 4) 41 | #define F_NETOPT_UID (a64 << 5) 42 | #define F_NETOPT_GID (a64 << 6) 43 | #define F_NETOPT_PUBIP (a64 << 7) 44 | 45 | typedef struct ___net_opt 46 | { 47 | uint16_t thread_l, thread_r; 48 | int max_worker_threads; 49 | uint16_t max_sock; 50 | uint64_t flags; 51 | char *st_p0; 52 | char *ssl_cert_def, *ssl_key_def; 53 | char user[64]; 54 | char group[64]; 55 | char chroot[PATH_MAX]; 56 | uid_t uid; 57 | gid_t gid; 58 | } _net_opt, *__net_opt; 59 | 60 | _net_opt net_opts; 61 | 62 | mda _sock_r; 63 | mda _boot_pca; 64 | mda net_post_init_rc; 65 | 66 | #endif /* SRC_GLUTIL_NET_H_ */ 67 | 68 | -------------------------------------------------------------------------------- /src/gv_off.c: -------------------------------------------------------------------------------- 1 | /* 2 | * gv_off.c 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #include 9 | #include 10 | 11 | #include 12 | 13 | uint64_t 14 | g_t8_ptr (void *base, size_t offset) 15 | { 16 | return (uint64_t) *((uint8_t*) (base + offset)); 17 | } 18 | 19 | int64_t 20 | g_ts8_ptr (void *base, size_t offset) 21 | { 22 | return (int64_t) *((int8_t*) (base + offset)); 23 | } 24 | 25 | uint64_t 26 | g_t16_ptr (void *base, size_t offset) 27 | { 28 | return (uint64_t) *((uint16_t*) (base + offset)); 29 | } 30 | 31 | int64_t 32 | g_ts16_ptr (void *base, size_t offset) 33 | { 34 | return (int64_t) *((int16_t*) (base + offset)); 35 | } 36 | 37 | uint64_t 38 | g_t32_ptr (void *base, size_t offset) 39 | { 40 | return (uint64_t) *((uint32_t*) (base + offset)); 41 | } 42 | 43 | int64_t 44 | g_ts32_ptr (void *base, size_t offset) 45 | { 46 | return (int64_t) *((int32_t*) (base + offset)); 47 | } 48 | 49 | uint64_t 50 | g_t64_ptr (void *base, size_t offset) 51 | { 52 | return *((uint64_t*) (base + offset)); 53 | } 54 | 55 | int64_t 56 | g_ts64_ptr (void *base, size_t offset) 57 | { 58 | return *((int64_t*) (base + offset)); 59 | } 60 | 61 | float 62 | g_tf_ptr (void *base, size_t offset) 63 | { 64 | return *((float*) (base + offset)); 65 | } 66 | 67 | float 68 | g_td_ptr (void *base, size_t offset) 69 | { 70 | return *((double*) (base + offset)); 71 | } 72 | 73 | -------------------------------------------------------------------------------- /src/gv_off.h: -------------------------------------------------------------------------------- 1 | /* 2 | * gv_off.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef GV_OFF_H_ 9 | #define GV_OFF_H_ 10 | 11 | float 12 | g_tf_ptr (void *base, size_t offset); 13 | 14 | g_sint_p g_ts8_ptr, g_ts16_ptr, g_ts32_ptr, g_ts64_ptr; 15 | __g_t_ptr g_t8_ptr, g_t16_ptr, g_t32_ptr, g_t64_ptr; 16 | 17 | #include 18 | 19 | typedef uint64_t 20 | (*g_t64_ptr_p) (void *base, size_t offset); 21 | 22 | typedef int64_t 23 | (*g_ts64_ptr_p) (void *base, size_t offset); 24 | 25 | typedef float 26 | (*g_tf_ptr_p) (void *base, size_t offset); 27 | 28 | #endif /* GV_OFF_H_ */ 29 | -------------------------------------------------------------------------------- /src/hasht.h: -------------------------------------------------------------------------------- 1 | /* 2 | * hasht.h 3 | * 4 | * Created on: Oct 23, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SRC_HASHT_H_ 9 | #define SRC_HASHT_H_ 10 | 11 | #include 12 | 13 | struct entry_s 14 | { 15 | unsigned char *key; 16 | unsigned short k_size; 17 | void *value; 18 | struct entry_s *next; 19 | }; 20 | 21 | typedef struct entry_s entry_t; 22 | 23 | #define F_HT_FREEVAL_ONCE (uint8_t) 1 24 | 25 | typedef void (*_cb_destroy) (entry_t * ptr); 26 | 27 | #include 28 | 29 | struct hashtable_s 30 | { 31 | size_t size; 32 | uint8_t flags; 33 | struct entry_s **table; 34 | }; 35 | 36 | typedef struct hashtable_s hashtable_t; 37 | 38 | hashtable_t * 39 | ht_create (size_t size); 40 | int 41 | ht_destroy (hashtable_t * hashtable, _cb_destroy call); 42 | int 43 | ht_hash (hashtable_t *hashtable, unsigned char *key, size_t keyLength); 44 | entry_t * 45 | ht_newpair (unsigned char *key, size_t k_size, void *value, size_t size); 46 | int 47 | ht_remove (hashtable_t *hashtable, unsigned char *key, size_t k_size); 48 | void 49 | ht_set (hashtable_t *hashtable, unsigned char *key, size_t k_size, void *value, 50 | size_t size); 51 | void * 52 | ht_get (hashtable_t *hashtable, unsigned char *key, size_t k_size); 53 | 54 | #endif /* SRC_HASHT_H_ */ 55 | -------------------------------------------------------------------------------- /src/l_error.h: -------------------------------------------------------------------------------- 1 | /* 2 | * l_error.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef L_ERROR_H_ 9 | #define L_ERROR_H_ 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #define F_SIGERR_CONTINUE 0x1 /* continue after exception */ 16 | 17 | #define ID_SIGERR_UNSPEC 0x0 18 | #define ID_SIGERR_MEMCPY 0x1 19 | #define ID_SIGERR_STRCPY 0x2 20 | #define ID_SIGERR_FREE 0x3 21 | #define ID_SIGERR_FREAD 0x4 22 | #define ID_SIGERR_FWRITE 0x5 23 | #define ID_SIGERR_FOPEN 0x6 24 | #define ID_SIGERR_FCLOSE 0x7 25 | #define ID_SIGERR_MEMMOVE 0x8 26 | 27 | typedef struct sig_jmp_buf 28 | { 29 | sigjmp_buf env, p_env; 30 | uint32_t flags, pflags; 31 | int id, pid; 32 | unsigned char ci, pci; 33 | char type[32]; 34 | void *callback, *arg; 35 | } sigjmp, *p_sigjmp; 36 | 37 | void 38 | g_setjmp (uint32_t flags, char *type, void *callback, void *arg); 39 | void 40 | sighdl_error (int sig, siginfo_t* siginfo, void* context); 41 | 42 | sigjmp g_sigjmp; 43 | 44 | #if __x86_64__ || __ppc64__ 45 | #define __AE_INTTL long long unsigned int 46 | #define __AE_SPFH "%.16llX" 47 | #else 48 | #define __AE_INTTL unsigned int 49 | #define __AE_SPFH "%.8X" 50 | #endif 51 | 52 | 53 | #endif /* L_ERROR_H_ */ 54 | -------------------------------------------------------------------------------- /src/l_sb.h: -------------------------------------------------------------------------------- 1 | /* 2 | * l_sb.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef L_SB_H_ 9 | #define L_SB_H_ 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #define sconf_log "SCONF" 17 | 18 | int updmode; 19 | char *argv_off; 20 | char GLROOT[PATH_MAX]; 21 | char SITEROOT_N[PATH_MAX]; 22 | char SITEROOT[PATH_MAX]; 23 | char DIRLOG[PATH_MAX]; 24 | char NUKELOG[PATH_MAX]; 25 | char DU_FLD[PATH_MAX]; 26 | char DUPEFILE[PATH_MAX]; 27 | char LASTONLOG[PATH_MAX]; 28 | char ONELINERS[PATH_MAX]; 29 | char FTPDATA[PATH_MAX]; 30 | char IMDBLOG[PATH_MAX]; 31 | char IMDBLOG_O[PATH_MAX]; 32 | char GAMELOG[PATH_MAX]; 33 | char TVLOG[PATH_MAX]; 34 | char GE1LOG[PATH_MAX]; 35 | char GE2LOG[PATH_MAX]; 36 | char GE3LOG[PATH_MAX]; 37 | char GE4LOG[PATH_MAX]; 38 | char ALTLOG[PATH_MAX]; 39 | char XLOG[PATH_MAX]; 40 | char SCONFLOG[PATH_MAX]; 41 | char GCONFLOG[PATH_MAX]; 42 | 43 | char *LOOPEXEC; 44 | 45 | key_t SHM_IPC; 46 | 47 | long long int db_max_size; 48 | 49 | #ifdef GLCONF 50 | char GLCONF_I[PATH_MAX]; 51 | #else 52 | char GLCONF_I[PATH_MAX]; 53 | #endif 54 | 55 | char b_spec1[PATH_MAX]; 56 | 57 | typedef void 58 | (*__p_log_write) (char *buf); 59 | 60 | FILE *fd_log_pce; 61 | int fd_log; 62 | __p_log_write p_log_write; 63 | 64 | struct stat log_st; 65 | 66 | char LOGFILE[PATH_MAX]; 67 | char *NUKESTR; 68 | char *NUKESTR_d[255]; 69 | 70 | #define MAX_REGSUB_OUT_LEN 32768 71 | 72 | char rs_o[MAX_REGSUB_OUT_LEN]; 73 | 74 | char G_USER[128]; 75 | char G_GROUP[128]; 76 | 77 | #endif /* L_SB_H_ */ 78 | -------------------------------------------------------------------------------- /src/lc_oper.c: -------------------------------------------------------------------------------- 1 | /* 2 | * lc_oper.c 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #include 9 | #include "lc_oper.h" 10 | 11 | int 12 | g_oper_and (int s, int d) 13 | { 14 | return (s && d); 15 | } 16 | 17 | int 18 | g_oper_or (int s, int d) 19 | { 20 | return (s || d); 21 | } 22 | 23 | int 24 | g_is_higher_f (float s, float d) 25 | { 26 | if (s > d) 27 | { 28 | return 0; 29 | } 30 | return 1; 31 | } 32 | 33 | int 34 | g_is_lower_f (float s, float d) 35 | { 36 | if (s < d) 37 | { 38 | return 0; 39 | } 40 | return 1; 41 | } 42 | 43 | int 44 | g_is_higher (uint64_t s, uint64_t d) 45 | { 46 | if (s > d) 47 | { 48 | return 0; 49 | } 50 | return 1; 51 | } 52 | 53 | int 54 | g_is_lower (uint64_t s, uint64_t d) 55 | { 56 | if (s < d) 57 | { 58 | return 0; 59 | } 60 | return 1; 61 | } 62 | 63 | int 64 | g_is_higher_s (int64_t s, int64_t d) 65 | { 66 | if (s > d) 67 | { 68 | return 0; 69 | } 70 | return 1; 71 | } 72 | 73 | int 74 | g_is_lower_s (int64_t s, int64_t d) 75 | { 76 | if (s < d) 77 | { 78 | return 0; 79 | } 80 | return 1; 81 | } 82 | 83 | int 84 | g_is_higher_2 (uint64_t s, uint64_t d) 85 | { 86 | return (s > d); 87 | } 88 | 89 | int 90 | g_is_higher_2_s (int64_t s, int64_t d) 91 | { 92 | return (s > d); 93 | } 94 | 95 | int 96 | g_is_lower_2 (uint64_t s, uint64_t d) 97 | { 98 | return (s < d); 99 | } 100 | 101 | int 102 | g_is_lower_2_s (int64_t s, int64_t d) 103 | { 104 | return (s < d); 105 | } 106 | 107 | int 108 | g_is_equal (uint64_t s, uint64_t d) 109 | { 110 | return (s == d); 111 | } 112 | 113 | int 114 | g_is_equal_s (int64_t s, int64_t d) 115 | { 116 | return (s == d); 117 | } 118 | 119 | int 120 | g_is_not_equal (uint64_t s, uint64_t d) 121 | { 122 | return (s != d); 123 | } 124 | 125 | int 126 | g_is_not_equal_s (int64_t s, int64_t d) 127 | { 128 | return (s != d); 129 | } 130 | 131 | int 132 | g_is_higherorequal (uint64_t s, uint64_t d) 133 | { 134 | return (s >= d); 135 | } 136 | 137 | int 138 | g_is_higherorequal_s (int64_t s, int64_t d) 139 | { 140 | return (s >= d); 141 | } 142 | 143 | int 144 | g_is_lowerorequal (uint64_t s, uint64_t d) 145 | { 146 | return (s <= d); 147 | } 148 | 149 | int 150 | g_is_lowerorequal_s (int64_t s, int64_t d) 151 | { 152 | return (s <= d); 153 | } 154 | 155 | int 156 | g_is (uint64_t s, uint64_t d) 157 | { 158 | return s != 0; 159 | } 160 | 161 | int 162 | g_is_s (int64_t s, int64_t d) 163 | { 164 | return s != 0; 165 | } 166 | 167 | int 168 | g_is_not (uint64_t s, uint64_t d) 169 | { 170 | return s != 0; 171 | } 172 | 173 | int 174 | g_is_not_s (int64_t s, int64_t d) 175 | { 176 | return s != 0; 177 | } 178 | 179 | int 180 | g_is_higher_d (double s, double d) 181 | { 182 | if (s > d) 183 | { 184 | return 0; 185 | } 186 | return 1; 187 | } 188 | 189 | int 190 | g_is_lower_d (double s, double d) 191 | { 192 | if (s < d) 193 | { 194 | return 0; 195 | } 196 | return 1; 197 | } 198 | 199 | int 200 | g_is_higher_f_2 (float s, float d) 201 | { 202 | return (s > d); 203 | } 204 | 205 | int 206 | g_is_lower_f_2 (float s, float d) 207 | { 208 | return (s < d); 209 | } 210 | 211 | int 212 | g_is_equal_f (float s, float d) 213 | { 214 | return (s == d); 215 | } 216 | 217 | int 218 | g_is_equal_d (double s, double d) 219 | { 220 | return (s == d); 221 | } 222 | 223 | int 224 | g_is_not_equal_f (float s, float d) 225 | { 226 | return (s != d); 227 | } 228 | 229 | int 230 | g_is_higherorequal_f (float s, float d) 231 | { 232 | return (s >= d); 233 | } 234 | 235 | int 236 | g_is_notequal_f (float s, float d) 237 | { 238 | return (s >= d); 239 | } 240 | 241 | int 242 | g_is_lowerorequal_f (float s, float d) 243 | { 244 | return (s <= d); 245 | } 246 | 247 | int 248 | g_is_f (float s, float d) 249 | { 250 | return s != 0; 251 | } 252 | 253 | int 254 | g_is_not_f (float s, float d) 255 | { 256 | return s == 0; 257 | } 258 | -------------------------------------------------------------------------------- /src/lc_oper.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lc_oper.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LC_OPER_H_ 9 | #define LC_OPER_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | int 17 | g_oper_and (int s, int d); 18 | int 19 | g_oper_or (int s, int d); 20 | 21 | typedef int 22 | __d_icomp (uint64_t s, uint64_t d); 23 | typedef int 24 | __d_iscomp (int64_t s, int64_t d); 25 | typedef int 26 | __d_fcomp (float s, float d); 27 | typedef int 28 | __d_comp (void *s, void *d); 29 | 30 | typedef int 31 | (*gs_cmp_p) (void *s, void *d, void * t_ptr); 32 | 33 | __d_iscomp g_is_higher_s, g_is_lower_s, g_is_higherorequal_s, g_is_equal_S, 34 | g_is_not_equal_s, g_is_lowerorequal_s, g_is_not_s, g_is_s, g_is_lower_2_s, 35 | g_is_higher_2_s, g_is_equal_s; 36 | 37 | __d_icomp g_is_higher, g_is_lower, g_is_higherorequal, g_is_equal, 38 | g_is_not_equal, g_is_lowerorequal, g_is_not, g_is, g_is_lower_2, 39 | g_is_higher_2, g_is_equal; 40 | 41 | __d_fcomp g_is_lower_f, g_is_higher_f, g_is_higherorequal_f, g_is_equal_f, 42 | g_is_lower_f_2, g_is_higher_f_2, g_is_not_equal_f, g_is_lowerorequal_f, 43 | g_is_f, g_is_not_f, g_is_equal_f, g_is_notequal_f; 44 | 45 | #endif /* LC_OPER_H_ */ 46 | -------------------------------------------------------------------------------- /src/log_io.h: -------------------------------------------------------------------------------- 1 | /* 2 | * log_io.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LOG_IO_H_ 9 | #define LOG_IO_H_ 10 | 11 | #define F_GBM_SHM_NO_DATAFILE (a32 << 1) 12 | 13 | #define MAX_SDENTRY_LEN 20000 14 | #define MAX_SENTRY_LEN 1024 15 | 16 | #include 17 | 18 | #include 19 | 20 | #include 21 | 22 | #define MSG_REDF_ABORT "WARNING: %s: aborting rebuild\n" 23 | #define MSG_UNRECOGNIZED_DATA_TYPE "ERROR: [%s] unrecognized data type\n" 24 | 25 | #include 26 | 27 | #define _E_MSG_MLI_DEF "import failed" 28 | #define _E_MSG_MLI_NOREF "g_proc0 is null" 29 | #define _E_MSG_MLI_NOMEMB "d_memb is zero" 30 | #define _E_MSG_MLI_NORES "no input data to import" 31 | #define _E_MSG_MLI_UTERM "could not process all mandatory items or an unterminated record was encountered" 32 | #define _E_MSG_MLI_MALF "malformed input data" 33 | 34 | #define _E_MSG_FDM_DEF "flushing data failed" 35 | #define _E_MSG_FDM_NOW _E_MSG_DEF_BNW 36 | #define _E_MSG_FDM_NOWC _E_MSG_DEF_BNW _E_MSG_DEF_CC 37 | #define _E_MSG_FDM_WF _E_MSG_DEF_WF 38 | #define _E_MSG_FDM_WFC _E_MSG_DEF_WF _E_MSG_DEF_CC 39 | #define _E_MSG_FDM_NORECW "no data was written" 40 | 41 | #define F_LOAD_RECORD_FLUSH ((uint16_t)1 << 1) 42 | #define F_LOAD_RECORD_DATA ((uint16_t)1 << 2) 43 | 44 | #define F_LOAD_RECORD_ALL (F_LOAD_RECORD_FLUSH|F_LOAD_RECORD_DATA) 45 | 46 | #define MAX_BWHOLD_BYTES 8388608 47 | 48 | typedef int 49 | (*__g_mdref) (__g_handle hdl, pmda md, off_t count); 50 | 51 | int 52 | d_write (char *arg); 53 | int 54 | g_fopen (char *file, char *mode, uint32_t flags, __g_handle hdl); 55 | void 56 | g_set_compression_opts (uint8_t level, __g_handle hdl); 57 | void * 58 | g_read (void *buffer, __g_handle hdl, size_t size); 59 | int 60 | g_close (__g_handle hdl); 61 | size_t 62 | g_load_data_md (void *output, size_t max, char *file, __g_handle hdl); 63 | int 64 | load_data_md (pmda md, char *file, __g_handle hdl); 65 | int 66 | gen_md_data_ref_cnull (__g_handle hdl, pmda md, off_t count); 67 | int 68 | gen_md_data_ref (__g_handle hdl, pmda md, off_t count); 69 | int 70 | gh_rewind (__g_handle hdl); 71 | int 72 | g_claf_mech (void *ptr); 73 | int 74 | g_cl_mrr (void *ptr); 75 | int 76 | g_buffer_into_memory (char *file, __g_handle hdl); 77 | int 78 | g_handle_pipe_cleanup (__g_handle hdl); 79 | int 80 | g_cleanup (__g_handle hdl); 81 | int 82 | g_clean_print_mech (pmda print_mech); 83 | int 84 | rebuild_data_file (char *file, __g_handle hdl); 85 | int 86 | flush_data_md (__g_handle hdl, char *outfile); 87 | int 88 | m_load_input_n (__g_handle hdl, FILE *input); 89 | int 90 | g_d_post_proc_gcb (void *buffer, void *p_hdl); 91 | int 92 | g_enum_log (_d_enuml callback, __g_handle hdl, off_t *nres, void *arg); 93 | int 94 | determine_temp_path (char *file, char *output, size_t max_out); 95 | int 96 | g_load_record (__g_handle hdl, pmda w_buffer, const void *data, off_t max, 97 | uint16_t flags); 98 | 99 | #define OPLOG_OUTPUT_NSTATS(dfile, sdst) { \ 100 | if (sdst.bw > 0) \ 101 | { \ 102 | fprintf(stderr, MSG_GEN_WROTE, dfile, (double) sdst.bw / 1024.0, \ 103 | (unsigned long long int)sdst.rw); \ 104 | } \ 105 | else \ 106 | { \ 107 | fprintf(stderr, MSG_GEN_NO_WRITE, dfile); \ 108 | } \ 109 | } 110 | 111 | #endif /* LOG_IO_H_ */ 112 | -------------------------------------------------------------------------------- /src/log_op.h: -------------------------------------------------------------------------------- 1 | /* 2 | * log_op.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LOG_OP_H_ 9 | #define LOG_OP_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | char * 17 | g_dgetf (char *str); 18 | 19 | typedef int 20 | _d_ag_handle_i (__g_handle); 21 | 22 | int 23 | determine_datatype (__g_handle hdl, char *file); 24 | int 25 | g_proc_mr (__g_handle hdl); 26 | 27 | char *_print_ptr, *_print_ptr_post, *_print_ptr_pre, *_cl_print_ptr; 28 | 29 | int 30 | data_backup_records (char *file); 31 | int 32 | rebuild (void *arg); 33 | int 34 | d_gen_dump (char *arg); 35 | 36 | #endif /* LOG_OP_H_ */ 37 | -------------------------------------------------------------------------------- /src/log_shm.c: -------------------------------------------------------------------------------- 1 | /* 2 | * log_shm.c 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #include 9 | #include "log_shm.h" 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | 22 | int 23 | g_shmap_data (__g_handle hdl, key_t ipc) 24 | { 25 | g_setjmp (0, "g_shmap_data", NULL, NULL); 26 | if (hdl->shmid) 27 | { 28 | return 1001; 29 | } 30 | 31 | if ((hdl->shmid = shmget (ipc, 0, 0)) == -1) 32 | { 33 | return 1002; 34 | } 35 | 36 | if ((hdl->data = shmat (hdl->shmid, NULL, SHM_RDONLY)) == (void*) -1) 37 | { 38 | hdl->data = NULL; 39 | return 1003; 40 | } 41 | 42 | if (shmctl (hdl->shmid, IPC_STAT, &hdl->ipcbuf) == -1) 43 | { 44 | return 1004; 45 | } 46 | 47 | if (!hdl->ipcbuf.shm_segsz) 48 | { 49 | return 1005; 50 | } 51 | 52 | hdl->total_sz = (off_t) hdl->ipcbuf.shm_segsz; 53 | 54 | return 0; 55 | } 56 | 57 | void * 58 | shmap (key_t ipc, struct shmid_ds *ipcret, size_t size, uint32_t *ret, 59 | int *shmid, int cflags, int shmflg) 60 | { 61 | g_setjmp (0, "shmap", NULL, NULL); 62 | 63 | void *ptr; 64 | int ir = 0; 65 | 66 | int i_shmid = -1; 67 | 68 | if (!shmid) 69 | { 70 | shmid = &i_shmid; 71 | } 72 | 73 | if (*ret & R_SHMAP_ALREADY_EXISTS) 74 | { 75 | ir = 1; 76 | if (gfl0 & F_OPT_SHMRO) 77 | { 78 | shmflg |= SHM_RDONLY; 79 | } 80 | } 81 | else if ((*shmid = shmget (ipc, size, 82 | IPC_CREAT | IPC_EXCL | cflags)) == -1) 83 | { 84 | if ( errno == EEXIST) 85 | { 86 | 87 | if (ret) 88 | { 89 | *ret |= R_SHMAP_ALREADY_EXISTS; 90 | } 91 | if ((*shmid = shmget (ipc, 0, 0)) == -1) 92 | { 93 | if (ret) 94 | { 95 | *ret |= R_SHMAP_FAILED_ATTACH; 96 | } 97 | return NULL; 98 | } 99 | if (gfl0 & F_OPT_SHMRO) 100 | { 101 | shmflg |= SHM_RDONLY; 102 | } 103 | } 104 | else 105 | { 106 | return NULL; 107 | } 108 | } 109 | 110 | if ((ptr = shmat (*shmid, NULL, shmflg)) == (void*) -1) 111 | { 112 | if (ret) 113 | { 114 | *ret |= R_SHMAP_FAILED_SHMAT; 115 | } 116 | return NULL; 117 | } 118 | 119 | if (!ipcret) 120 | { 121 | return ptr; 122 | } 123 | 124 | if (ir != 1) 125 | { 126 | if (shmctl (*shmid, IPC_STAT, ipcret) == -1) 127 | { 128 | return NULL; 129 | } 130 | } 131 | 132 | return ptr; 133 | } 134 | 135 | int 136 | g_map_shm (__g_handle hdl, key_t ipc) 137 | { 138 | hdl->flags |= F_GH_ONSHM; 139 | 140 | if (hdl->buffer.count) 141 | { 142 | return 0; 143 | } 144 | 145 | if (!SHM_IPC) 146 | { 147 | print_str ( 148 | "ERROR: %s: could not get IPC key, set manually (--ipc )\n", 149 | MSG_DEF_SHM); 150 | return 101; 151 | } 152 | int r; 153 | if ((r = load_data_md (&hdl->buffer, NULL, hdl))) 154 | { 155 | if (((gfl & F_OPT_VERBOSE) && r != 1002) || (gfl & F_OPT_VERBOSE4)) 156 | { 157 | print_str ( 158 | "ERROR: %s: [%u/%u] [%u] [%u] could not map shared memory segment! [%d] [%s]\n", 159 | MSG_DEF_SHM, 160 | (uint32_t) hdl->buffer.count, 161 | (uint32_t) (hdl->total_sz / hdl->block_sz), 162 | (uint32_t) hdl->total_sz, hdl->block_sz, r, 163 | g_strerr_r (errno, hdl->strerr_b, sizeof(hdl->strerr_b))); 164 | } 165 | return r; 166 | } 167 | 168 | if (gfl & F_OPT_VERBOSE2) 169 | { 170 | print_str ("NOTICE: %s: mapped %u records\n", 171 | MSG_DEF_SHM, 172 | (uint32_t) hdl->buffer.count); 173 | } 174 | 175 | #ifndef _MAKE_SBIN 176 | pdt_set_online (hdl); 177 | #endif 178 | 179 | return 0; 180 | } 181 | 182 | int 183 | g_shm_cleanup (__g_handle hdl) 184 | { 185 | int r = 0; 186 | 187 | if (shmdt (hdl->data) == -1) 188 | { 189 | r++; 190 | } 191 | 192 | if ((hdl->flags & F_GH_SHM) && (hdl->flags & F_GH_SHMDESTONEXIT)) 193 | { 194 | if (shmctl (hdl->shmid, IPC_RMID, NULL) == -1) 195 | { 196 | r++; 197 | } 198 | } 199 | 200 | hdl->data = NULL; 201 | hdl->shmid = 0; 202 | 203 | return r; 204 | } 205 | -------------------------------------------------------------------------------- /src/log_shm.h: -------------------------------------------------------------------------------- 1 | /* 2 | * log_shm.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LOG_SHM_H_ 9 | #define LOG_SHM_H_ 10 | 11 | #define MSG_DEF_SHM "SHARED MEMORY" 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | #include 19 | #include 20 | 21 | #define R_SHMAP_ALREADY_EXISTS (a32 << 1) 22 | #define R_SHMAP_FAILED_ATTACH (a32 << 2) 23 | #define R_SHMAP_FAILED_SHMAT (a32 << 3) 24 | 25 | int 26 | g_shmap_data (__g_handle, key_t); 27 | int 28 | g_map_shm (__g_handle, key_t); 29 | void * 30 | shmap (key_t ipc, struct shmid_ds *ipcret, size_t size, uint32_t *ret, 31 | int *shmid, int cflags, int shmflg); 32 | int 33 | g_shm_cleanup (__g_handle hdl); 34 | 35 | #endif /* LOG_SHM_H_ */ 36 | -------------------------------------------------------------------------------- /src/lref.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_H_ 9 | #define LREF_H_ 10 | 11 | #include 12 | #include 13 | 14 | #include 15 | 16 | #include 17 | #include 18 | 19 | #define MAX_SHARG_SZ 4096 20 | 21 | void * 22 | as_ref_to_val_lk (char *match, void *c, __d_drt_h mppd, char *defdc); 23 | char * 24 | g_get_stf (char *match); 25 | 26 | typedef void* 27 | rtv_af (void *arg, char *match, char *output, size_t max_size, __d_drt_h mppd); 28 | 29 | rtv_af ref_to_val_af, ref_to_val_af_math; 30 | 31 | int 32 | rtv_q (void *query, char *output, size_t max_size); 33 | 34 | char* 35 | l_mppd_shell_ex (char *input, char *output, size_t max_size, void **l_nr, 36 | char l, char r, uint32_t flags); 37 | 38 | #define F_MPPD_SHX_TZERO (a32 << 1) 39 | 40 | #define LMS_EX_L 0x28 41 | #define LMS_EX_R 0x29 42 | 43 | #define PROC_SH_EX(match) { \ 44 | char m_b[MAX_SHARG_SZ]; \ 45 | void *l_next_ref = NULL; \ 46 | if (NULL == (match = l_mppd_shell_ex(match, m_b, MAX_SHARG_SZ, &l_next_ref, LMS_EX_L, LMS_EX_R, 0x0))) \ 47 | { \ 48 | return NULL; \ 49 | } \ 50 | if (NULL != mppd && l_next_ref != NULL) { \ 51 | ((__d_drt_h) mppd)->varg_l = (char*)l_next_ref; \ 52 | }\ 53 | }; 54 | 55 | char * 56 | g_extract_vfield (char *input, char *output, size_t max_size, size_t offset); 57 | int 58 | ref_to_val_ptr_offset (char *match, size_t *offset, size_t max_size); 59 | 60 | size_t 61 | l_mppd_gvlen (char *input); 62 | 63 | #define REF_TO_VAL_RESOLVE(arg, match, output, what) { \ 64 | void *ptr = what(arg, match, output); \ 65 | if ( NULL == ptr)\ 66 | { \ 67 | return NULL; \ 68 | } \ 69 | if (*output) \ 70 | { \ 71 | int retval; \ 72 | size_t offset; \ 73 | if (0 == (retval = ref_to_val_ptr_offset(match, &offset, *output))) \ 74 | { \ 75 | ptr = (void*) ((size_t) ptr + offset); \ 76 | *output = 1; \ 77 | } \ 78 | else if (2 == retval) \ 79 | { \ 80 | ptr = NULL; \ 81 | *output = 0; \ 82 | } \ 83 | } \ 84 | return ptr; \ 85 | }; 86 | 87 | #define MSG_UGMISSING "" 88 | 89 | 90 | #define dt_rval_guid(stor, id, out) \ 91 | { \ 92 | p_gu_n pgn = search_xuid_id(stor, (uint32_t)(id)); \ 93 | if (pgn != NULL) \ 94 | { \ 95 | return pgn->name; \ 96 | } \ 97 | strncpy(out, MSG_UGMISSING, sizeof(MSG_UGMISSING)); \ 98 | }; 99 | 100 | #endif /* LREF_H_ */ 101 | -------------------------------------------------------------------------------- /src/lref_altlog.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_altlog.h 3 | * 4 | * Created on: Jul 22, 2014 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_ALTLOG_H_ 9 | #define LREF_ALTLOG_H_ 10 | 11 | #include 12 | 13 | #include 14 | 15 | #define _MC_ALTLOG_FILES "files" 16 | 17 | #pragma pack(push, 4) 18 | 19 | struct altlog 20 | { 21 | uint16_t status; 22 | time32_t uptime; 23 | uint16_t uid; 24 | uint16_t gid; 25 | uint16_t files; 26 | uint64_t bytes; 27 | char dirname[4096]; 28 | }; 29 | 30 | #pragma pack(pop) 31 | 32 | #define AL_SZ sizeof(struct altlog) 33 | 34 | __g_proc_rv dt_rval_altlog_user, dt_rval_altlog_group, dt_rval_altlog_files, 35 | dt_rval_altlog_size, dt_rval_altlog_status, dt_rval_altlog_time, 36 | dt_rval_altlog_mode_e, dt_rval_altlog_dir, dt_rval_xg_altlog, 37 | dt_rval_x_altlog, dt_rval_altlog_basedir; 38 | 39 | __d_ref_to_pval ref_to_val_ptr_altlog; 40 | _d_rtv_lk ref_to_val_lk_altlog; 41 | 42 | __d_format_block altlog_format_block, altlog_format_block_exp, 43 | altlog_format_block_batch; 44 | 45 | int 46 | gcb_altlog (void *buffer, char *key, char *val); 47 | 48 | #endif /* LREF_ALTLOG_H_ */ 49 | -------------------------------------------------------------------------------- /src/lref_dirlog.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_dirlog.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_DIRLOG_H_ 9 | #define LREF_DIRLOG_H_ 10 | 11 | #include 12 | 13 | #include 14 | 15 | #define _MC_DIRLOG_FILES "files" 16 | 17 | __g_proc_rv dt_rval_dirlog_user, dt_rval_dirlog_group, dt_rval_dirlog_files, 18 | dt_rval_dirlog_size, dt_rval_dirlog_status, dt_rval_dirlog_time, 19 | dt_rval_dirlog_mode_e, dt_rval_dirlog_dir, dt_rval_xg_dirlog, 20 | dt_rval_x_dirlog, dt_rval_dirlog_basedir; 21 | 22 | __d_ref_to_pval ref_to_val_ptr_dirlog; 23 | _d_rtv_lk ref_to_val_lk_dirlog; 24 | 25 | __d_format_block dirlog_format_block, dirlog_format_block_exp, 26 | dirlog_format_block_batch; 27 | 28 | int 29 | gcb_dirlog (void *buffer, char *key, char *val); 30 | 31 | #endif /* LREF_DIRLOG_H_ */ 32 | -------------------------------------------------------------------------------- /src/lref_dupefile.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_dupefile.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_DUPEFILE_H_ 9 | #define LREF_DUPEFILE_H_ 10 | 11 | #include 12 | 13 | #include 14 | 15 | #define _MC_GLOB_FILE "file" 16 | 17 | __d_ref_to_pval ref_to_val_ptr_dupefile; 18 | _d_rtv_lk ref_to_val_lk_dupefile; 19 | 20 | __g_proc_rv dt_rval_dupefile_time, dt_rval_dupefile_file, dt_rval_dupefile_user; 21 | 22 | __d_format_block dupefile_format_block, dupefile_format_block_batch, 23 | dupefile_format_block_exp; 24 | 25 | int 26 | gcb_dupefile (void *buffer, char *key, char *val); 27 | 28 | #endif /* LREF_DUPEFILE_H_ */ 29 | -------------------------------------------------------------------------------- /src/lref_game.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_game.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_GAME_H_ 9 | #define LREF_GAME_H_ 10 | 11 | #pragma pack(push, 4) 12 | 13 | #include 14 | 15 | typedef struct ___d_game 16 | { 17 | char dirname[255]; 18 | int32_t timestamp; 19 | float rating; 20 | /* ------------- */ 21 | uint8_t _d_unused[512]; /* Reserved for future use */ 22 | } _d_game, *__d_game; 23 | 24 | #define GM_SZ sizeof(_d_game) 25 | 26 | #pragma pack(pop) 27 | 28 | __d_ref_to_pval ref_to_val_ptr_game; 29 | _d_rtv_lk ref_to_val_lk_game; 30 | 31 | __d_format_block game_format_block, game_format_block_batch, 32 | game_format_block_exp; 33 | 34 | __g_proc_rv dt_rval_game_score, dt_rval_game_time, dt_rval_game_mode, 35 | dt_rval_game_basedir, dt_rval_game_dir; 36 | 37 | int 38 | gcb_game (void *buffer, char *key, char *val); 39 | 40 | #endif /* LREF_GAME_H_ */ 41 | -------------------------------------------------------------------------------- /src/lref_gconf.h: -------------------------------------------------------------------------------- 1 | /*5 2 | * lref_gconf.h5 3 | * 4 | * Created on: Dec 10, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_GCONF_H_ 9 | #define LREF_GCONF_H_ 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #include 16 | #include 17 | #include 18 | 19 | #define _MC_GCONF_R_CLEAN "r_path_clean" 20 | #define _MC_GCONF_R_CLEAN_ICASE "r_path_clean_icase" 21 | #define _MC_GCONF_R_POSTPROC "r_path_postproc" 22 | #define _MC_GCONF_R_YEARM "r_year_extract" 23 | #define _MC_GCONF_R_SKIPBDIR "r_skip_basedir" 24 | #define _MC_GCONF_R_SECTS "paths" 25 | #define _MC_GCONF_O_SHM "use_shared_mem" 26 | #define _MC_GCONF_E_LF_IMDB "path_exec_on_lookup_fail_imdb" 27 | #define _MC_GCONF_E_LF_TVRAGE "path_exec_on_lookup_fail_tvrage" 28 | #define _MC_GCONF_E_OLF "execute_on_lookup_fail" 29 | #define _MC_GCONF_E_M "path_exec_on_match" 30 | #define _MC_GCONF_EX_U "r_exclude_user" 31 | #define _MC_GCONF_EX_UF "r_exclude_user_flags" 32 | #define _MC_GCONF_STRCTNSI "lookup_match_strictness_imdb" 33 | #define _MC_GCONF_STRCTNST "lookup_match_strictness_tvrage" 34 | #define _MC_GCONF_LOGGING "logging" 35 | #define _MC_GCONF_LOGSTR "log_string" 36 | #define _MC_GCONF_IMDB_SKZERO "imdb_skip_zero_score" 37 | #define _MC_GCONF_IMDB_SKZEROV "imdb_skip_zero_votes" 38 | 39 | #define GCONF_MAX_REG_EXPR 16384 40 | #define GCONF_MAX_EXEC 4096 41 | #define GCONF_MAX_REG_USR 2048 42 | #define GCONF_MAX_UFLAGS 256 43 | 44 | __d_format_block gconf_format_block, gconf_format_block_batch, 45 | gconf_format_block_exp; 46 | 47 | __d_ref_to_pval ref_to_val_ptr_gconf; 48 | 49 | _d_rtv_lk ref_to_val_lk_gconf; 50 | 51 | int 52 | gcb_gconf (void *buffer, char *key, char *val); 53 | 54 | #pragma pack(push, 4) 55 | 56 | typedef struct ___d_gconf 57 | { 58 | int8_t o_use_shared_mem; 59 | int8_t o_exec_on_lookup_fail; 60 | int8_t o_lookup_strictness_imdb; 61 | int8_t o_lookup_strictness_tvrage; 62 | int8_t o_logging; 63 | int8_t o_imdb_skip_zero_score; 64 | char r_clean[GCONF_MAX_REG_EXPR]; 65 | char r_postproc[GCONF_MAX_REG_EXPR]; 66 | char r_yearm[GCONF_MAX_REG_EXPR]; 67 | char r_sects[GCONF_MAX_REG_EXPR]; 68 | char r_skip_basedir[GCONF_MAX_REG_EXPR]; 69 | char r_exclude_user[GCONF_MAX_REG_USR]; 70 | char r_exclude_user_flags[GCONF_MAX_UFLAGS]; 71 | char e_lookup_fail_imdb[GCONF_MAX_EXEC]; 72 | char e_lookup_fail_tvrage[GCONF_MAX_EXEC]; 73 | char e_match[GCONF_MAX_EXEC]; 74 | int8_t o_r_clean_icase; 75 | char o_log_string[256]; 76 | int8_t o_imdb_skip_zero_votes; 77 | unsigned char ___padding[7935]; 78 | } _d_gconf, *__d_gconf; 79 | 80 | #pragma pack(pop) 81 | 82 | #define GC_SZ sizeof(_d_gconf) 83 | 84 | #endif /* LREF_GCONF_H_ */ 85 | -------------------------------------------------------------------------------- /src/lref_gen1.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_gen1.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_GEN1_H_ 9 | #define LREF_GEN1_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | __d_format_block gen1_format_block, gen1_format_block_batch, 17 | gen1_format_block_exp; 18 | 19 | __d_ref_to_pval ref_to_val_ptr_gen1; 20 | 21 | _d_rtv_lk ref_to_val_lk_gen1; 22 | 23 | int 24 | gcb_gen1 (void *buffer, char *key, char *val); 25 | 26 | #pragma pack(push, 4) 27 | 28 | typedef struct ___d_generic_s2044 29 | { 30 | uint32_t i32; 31 | char s_1[255]; 32 | char s_2[255]; 33 | char s_3[255]; 34 | char s_4[255]; 35 | char s_5[255]; 36 | char s_6[255]; 37 | char s_7[255]; 38 | char s_8[255]; 39 | } _d_generic_s2044, *__d_generic_s2044; 40 | 41 | #pragma pack(pop) 42 | 43 | #define G1_SZ sizeof(_d_generic_s2044) 44 | 45 | #endif /* LREF_GEN1_H_ */ 46 | -------------------------------------------------------------------------------- /src/lref_gen2.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_gen2.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_GEN2_H_ 9 | #define LREF_GEN2_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | __d_format_block gen2_format_block, gen2_format_block_batch, 17 | gen2_format_block_exp; 18 | 19 | __d_ref_to_pval ref_to_val_ptr_gen2; 20 | 21 | _d_rtv_lk ref_to_val_lk_gen2; 22 | 23 | int 24 | gcb_gen2 (void *buffer, char *key, char *val); 25 | 26 | #pragma pack(push, 4) 27 | 28 | typedef struct ___d_generic_s1644 29 | { 30 | uint32_t ui32_1; 31 | uint32_t ui32_2; 32 | uint32_t ui32_3; 33 | uint32_t ui32_4; 34 | int32_t i32_1; 35 | int32_t i32_2; 36 | int32_t i32_3; 37 | int32_t i32_4; 38 | float f_1; 39 | float f_2; 40 | float f_3; 41 | float f_4; 42 | uint8_t _d_unused_1[32]; 43 | uint64_t ui64_1; 44 | uint64_t ui64_2; 45 | uint64_t ui64_3; 46 | uint64_t ui64_4; 47 | char s_1[255]; 48 | char s_2[255]; 49 | char s_3[255]; 50 | char s_4[255]; 51 | char s_5[128]; 52 | char s_6[128]; 53 | char s_7[128]; 54 | char s_8[128]; 55 | } _d_generic_s1644, *__d_generic_s1644; 56 | 57 | #pragma pack(pop) 58 | 59 | #define G2_SZ sizeof(_d_generic_s1644) 60 | 61 | #endif /* LREF_GEN2_H_ */ 62 | -------------------------------------------------------------------------------- /src/lref_gen3.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_gen3.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_GEN3_H_ 9 | #define LREF_GEN3_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | __d_format_block zone_format_block, zone_format_block_batch, 17 | zone_format_block_exp; 18 | 19 | __d_ref_to_pval ref_to_val_ptr_gen3; 20 | 21 | _d_rtv_lk ref_to_val_lk_gen3; 22 | 23 | int 24 | gcb_gen3 (void *buffer, char *key, char *val); 25 | 26 | #pragma pack(push, 4) 27 | 28 | typedef struct ___d_generic_s800 29 | { 30 | int32_t i32_1; 31 | int32_t i32_2; 32 | uint32_t ui32_1; 33 | uint32_t ui32_2; 34 | uint64_t ui64_1; 35 | uint64_t ui64_2; 36 | char s_1[255]; 37 | char s_2[255]; 38 | char s_3[128]; 39 | char s_4[128]; 40 | } _d_generic_s800, *__d_generic_s800; 41 | 42 | #pragma pack(pop) 43 | 44 | #define G3_SZ sizeof(_d_generic_s800) 45 | 46 | #endif /* LREF_GEN3_H_ */ 47 | -------------------------------------------------------------------------------- /src/lref_gen4.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_gen4.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_GEN4_H_ 9 | #define LREF_GEN4_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | __d_format_block gen4_format_block, gen4_format_block_batch, 17 | gen4_format_block_exp; 18 | 19 | __d_ref_to_pval ref_to_val_ptr_gen4; 20 | 21 | _d_rtv_lk ref_to_val_lk_gen4; 22 | 23 | int 24 | gcb_gen4 (void *buffer, char *key, char *val); 25 | 26 | #pragma pack(push, 4) 27 | 28 | typedef struct ___d_generic_s4640 29 | { 30 | int32_t i32_1; 31 | int32_t i32_2; 32 | uint32_t ui32_1; 33 | uint32_t ui32_2; 34 | uint64_t ui64_1; 35 | uint64_t ui64_2; 36 | char s_1[4096]; 37 | char s_2[255]; 38 | char s_3[128]; 39 | char s_4[128]; 40 | } _d_generic_s4640, *__d_generic_s4640; 41 | 42 | #pragma pack(pop) 43 | 44 | #define G4_SZ sizeof(_d_generic_s4640) 45 | 46 | #endif /* LREF_GEN4_H_ */ 47 | -------------------------------------------------------------------------------- /src/lref_generic.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_gen.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_GEN_H_ 9 | #define LREF_GEN_H_ 10 | 11 | #include 12 | #include 13 | 14 | #define _MC_GE_I1 "i1" 15 | #define _MC_GE_I2 "i2" 16 | #define _MC_GE_I3 "i3" 17 | #define _MC_GE_I4 "i4" 18 | #define _MC_GE_U1 "u1" 19 | #define _MC_GE_U2 "u2" 20 | #define _MC_GE_U3 "u3" 21 | #define _MC_GE_U4 "u4" 22 | #define _MC_GE_F1 "f1" 23 | #define _MC_GE_F2 "f2" 24 | #define _MC_GE_F3 "f3" 25 | #define _MC_GE_F4 "f4" 26 | #define _MC_GE_UL1 "ul1" 27 | #define _MC_GE_UL2 "ul2" 28 | #define _MC_GE_UL3 "ul3" 29 | #define _MC_GE_UL4 "ul4" 30 | #define _MC_GE_GE1 "ge1" 31 | #define _MC_GE_GE2 "ge2" 32 | #define _MC_GE_GE3 "ge3" 33 | #define _MC_GE_GE4 "ge4" 34 | #define _MC_GE_GE5 "ge5" 35 | #define _MC_GE_GE6 "ge6" 36 | #define _MC_GE_GE7 "ge7" 37 | #define _MC_GE_GE8 "ge8" 38 | 39 | #define DT_GG_GIDX(m) { \ 40 | idx = (int) strtol(&m[7], NULL, 10); \ 41 | if (!(idx >= 0 && idx <= MAX_GLOB_STOR_AR_COUNT)) \ 42 | { \ 43 | return NULL; \ 44 | } \ 45 | } 46 | 47 | _d_rtv_lk ref_to_val_lk_generic; 48 | 49 | int 50 | ref_to_val_generic (void *arg, char *match, char *output, size_t max_size, 51 | void *mppd); 52 | 53 | __g_proc_rv dt_rval_generic_nukestr, dt_rval_generic_procid, 54 | dt_rval_generic_ipc, dt_rval_generic_usroot, dt_rval_generic_logroot, 55 | dt_rval_generic_memlimit, dt_rval_generic_curtime, dt_rval_q, 56 | dt_rval_generic_exe, dt_rval_generic_glroot, dt_rval_generic_siteroot, 57 | dt_rval_generic_siterootn, dt_rval_generic_ftpdata, 58 | dt_rval_generic_imdbfile, dt_rval_generic_tvfile, dt_rval_generic_gamefile, 59 | dt_rval_generic_spec1, dt_rval_generic_glconf, dt_rval_generic_logfile, 60 | dt_rval_gg_int, dt_rval_gg_float; 61 | 62 | #define L_AV_MAX 256 63 | 64 | char *l_av_st[L_AV_MAX]; 65 | 66 | #endif /* LREF_GEN_H_ */ 67 | -------------------------------------------------------------------------------- /src/lref_glob.c: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_glob.c 3 | * 4 | * Created on: Aug 27, 2014 5 | * Author: reboot 6 | */ 7 | 8 | #include 9 | #include "lref_glob.h" 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include 17 | 18 | int64_t glob_curtime = 0; 19 | 20 | static void * 21 | g_proc_gstor (__g_handle hdl, char *field, int *output) 22 | { 23 | if (is_ascii_numeric (field[7])) 24 | { 25 | return NULL; 26 | } 27 | 28 | errno = 0; 29 | 30 | int idx = (int) strtol (&field[7], NULL, 10); 31 | 32 | if (errno == ERANGE || errno == EINVAL) 33 | { 34 | return NULL; 35 | } 36 | 37 | if (!strncmp (field, _MC_GLOB_U64G, 7)) 38 | { 39 | *output = 8; 40 | memset ((void*) &glob_ui64_stor[idx], 0x0, sizeof(uint64_t)); 41 | return (void*) &glob_ui64_stor[idx]; 42 | } 43 | else if (!strncmp (field, _MC_GLOB_S64G, 7)) 44 | { 45 | *output = -8; 46 | memset ((void*) &glob_si64_stor[idx], 0x0, sizeof(int64_t)); 47 | return (void*) &glob_si64_stor[idx]; 48 | } 49 | else if (!strncmp (field, _MC_GLOB_F32G, 7)) 50 | { 51 | *output = -32; 52 | memset ((void*) &glob_float_stor[idx], 0x0, sizeof(float)); 53 | return (void*) &glob_float_stor[idx]; 54 | } 55 | 56 | return NULL; 57 | } 58 | 59 | void * 60 | g_get_glob_ptr_e (__g_handle hdl, char *field, int *output) 61 | { 62 | g_setjmp (0, "g_get_glob_ptr", NULL, NULL); 63 | 64 | if (!strncmp (field, _MC_GLOB_CURTIME, 7)) 65 | { 66 | *output = -33; 67 | memset ((void*) &glob_curtime, 0x0, sizeof(glob_curtime)); 68 | return (void*) &glob_curtime; 69 | } 70 | else 71 | { 72 | return g_proc_gstor (hdl, field, output); 73 | } 74 | } 75 | 76 | void * 77 | g_get_glob_ptr (void *arg, char *match, int *output) 78 | { 79 | REF_TO_VAL_RESOLVE(arg, match, output, g_get_glob_ptr_e) 80 | } 81 | 82 | -------------------------------------------------------------------------------- /src/lref_glob.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | void * 4 | g_get_glob_ptr (void *hdl, char *field, int * output); 5 | -------------------------------------------------------------------------------- /src/lref_imdb.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_imdb.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_IMDB_H_ 9 | #define LREF_IMDB_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | #define _MC_IMDB_RELEASED "released" 17 | #define _MC_IMDB_VOTES "votes" 18 | #define _MC_IMDB_YEAR "year" 19 | 20 | #define _MC_IMDB_TYPE "type" 21 | #define _MC_IMDB_ACTORS "actors" 22 | #define _MC_IMDB_TITLE "title" 23 | #define _MC_IMDB_IMDBID "imdbid" 24 | #define _MC_IMDB_RATED "rated" 25 | #define _MC_IMDB_DIRECT "director" 26 | #define _MC_IMDB_SYNOPSIS "plot" 27 | #define _MC_IMDB_LANGUAGE "language" 28 | #define _MC_IMDB_COUNTRY "country" 29 | #define _MC_IMDB_SCREENS "screens" 30 | 31 | #define STD_FMT_DATE_STR "%d %b %Y" 32 | 33 | __g_proc_rv dt_rval_imdb_time, dt_rval_imdb_score, dt_rval_imdb_votes, 34 | dt_rval_imdb_runtime, dt_rval_imdb_released, dt_rval_imdb_year, 35 | dt_rval_imdb_mode, dt_rval_imdb_basedir, dt_rval_imdb_dir, 36 | dt_rval_imdb_imdbid, dt_rval_imdb_genre, dt_rval_imdb_rated, 37 | dt_rval_imdb_title, dt_rval_imdb_director, dt_rval_imdb_actors, 38 | dt_rval_imdb_synopsis, dt_rval_imdb_x, dt_rval_imdb_xg; 39 | 40 | __d_ref_to_pval ref_to_val_ptr_imdb; 41 | 42 | _d_rtv_lk ref_to_val_lk_imdb; 43 | 44 | __d_format_block imdb_format_block, imdb_format_block_batch, 45 | imdb_format_block_exp; 46 | 47 | int 48 | gcb_imdbh (void *buffer, char *key, char *val); 49 | 50 | #pragma pack(push, 4) 51 | 52 | typedef struct ___d_imdb 53 | { 54 | char dirname[255]; 55 | int32_t timestamp; 56 | char imdb_id[64]; /* IMDB ID */ 57 | float rating; /* IMDB Rating */ 58 | uint32_t votes; /* IMDB Votes */ 59 | char genres[255]; /* List of genres (comma delimited) */ 60 | uint16_t year; 61 | uint8_t _d_unused_m[3]; 62 | char title[128]; 63 | int32_t released; 64 | uint32_t runtime; 65 | char rated[32]; 66 | char actors[128]; 67 | char director[64]; 68 | char synopsis[384]; 69 | char language[128]; 70 | char country[128]; 71 | char type[32]; 72 | uint32_t screens; 73 | uint8_t _padding[24]; 74 | } _d_imdb, *__d_imdb; 75 | 76 | #pragma pack(pop) 77 | 78 | #define ID_SZ sizeof(_d_imdb) 79 | 80 | #endif /* LREF_IMDB_H_ */ 81 | -------------------------------------------------------------------------------- /src/lref_imdb_old.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_imdb.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_IMDB_O_H_ 9 | #define LREF_IMDB_O_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | #define STD_FMT_DATE_STR "%d %b %Y" 17 | 18 | __g_proc_rv dt_rval_imdb_o_time, dt_rval_imdb_o_score, dt_rval_imdb_o_votes, 19 | dt_rval_imdb_o_runtime, dt_rval_imdb_o_released, dt_rval_imdb_o_year, 20 | dt_rval_imdb_o_mode, dt_rval_imdb_o_basedir, dt_rval_imdb_o_dir, 21 | dt_rval_imdb_o_imdbid, dt_rval_imdb_o_genre, dt_rval_imdb_o_rated, 22 | dt_rval_imdb_o_title, dt_rval_imdb_o_director, dt_rval_imdb_o_actors, 23 | dt_rval_imdb_o_synopsis, dt_rval_imdb_o_x, dt_rval_imdb_o_xg; 24 | 25 | __d_ref_to_pval ref_to_val_ptr_imdb_o; 26 | 27 | _d_rtv_lk ref_to_val_lk_imdb_o; 28 | 29 | __d_format_block imdb_o_format_block, imdb_o_format_block_batch, 30 | imdb_o_format_block_exp; 31 | 32 | int 33 | gcb_imdbh_o (void *buffer, char *key, char *val); 34 | 35 | #pragma pack(push, 4) 36 | 37 | typedef struct ___d_imdb_o 38 | { 39 | char dirname[255]; 40 | int32_t timestamp; 41 | char imdb_id[64]; /* IMDB ID */ 42 | float rating; /* IMDB Rating */ 43 | uint32_t votes; /* IMDB Votes */ 44 | char genres[255]; /* List of genres (comma delimited) */ 45 | uint16_t year; 46 | uint8_t _d_unused_m[3]; 47 | char title[128]; 48 | int32_t released; 49 | uint32_t runtime; 50 | char rated[8]; 51 | char actors[128]; 52 | char director[64]; 53 | char synopsis[198]; 54 | /* ------------- */ 55 | uint8_t _d_unused_e[32]; /* Reserved for future use */ 56 | 57 | } _d_imdb_o, *__d_imdb_o; 58 | 59 | #pragma pack(pop) 60 | 61 | #define IDO_SZ sizeof(_d_imdb_o) 62 | 63 | #endif /* LREF_IMDB_O_H_ */ 64 | -------------------------------------------------------------------------------- /src/lref_lastonlog.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_lastonlog.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_LASTONLOG_H_ 9 | #define LREF_LASTONLOG_H_ 10 | 11 | #define _MC_LASTONLOG_STATS "stats" 12 | 13 | #include 14 | 15 | #include 16 | 17 | __d_ref_to_pval ref_to_val_ptr_lastonlog; 18 | 19 | _d_rtv_lk ref_to_val_lk_lastonlog; 20 | 21 | __d_format_block lastonlog_format_block, lastonlog_format_block_batch, 22 | lastonlog_format_block_exp; 23 | 24 | __g_proc_rv dt_rval_lastonlog_logon, dt_rval_lastonlog_logoff, 25 | dt_rval_lastonlog_upload, dt_rval_lastonlog_download, 26 | dt_rval_lastonlog_config, dt_rval_lastonlog_user, dt_rval_lastonlog_user, 27 | dt_rval_lastonlog_group, dt_rval_lastonlog_stats, dt_rval_lastonlog_tag; 28 | 29 | int 30 | gcb_lastonlog (void *buffer, char *key, char *val); 31 | 32 | #endif /* LREF_LASTONLOG_H_ */ 33 | -------------------------------------------------------------------------------- /src/lref_nukelog.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_nukelog.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_NUKELOG_H_ 9 | #define LREF_NUKELOG_H_ 10 | 11 | #include 12 | 13 | #define _MC_NUKELOG_NUKER "nuker" 14 | #define _MC_NUKELOG_UNNUKER "unnuker" 15 | #define _MC_NUKELOG_NUKEE "nukee" 16 | #define _MC_NUKELOG_REASON "reason" 17 | #define _MC_NUKELOG_MULT "mult" 18 | 19 | __d_ref_to_pval ref_to_val_ptr_nukelog; 20 | _d_rtv_lk ref_to_val_lk_nukelog; 21 | 22 | __g_proc_rv dt_rval_nukelog_size, dt_rval_nukelog_time, dt_rval_nukelog_status, 23 | dt_rval_nukelog_mult, dt_rval_nukelog_mode_e, dt_rval_nukelog_dir, 24 | dt_rval_nukelog_basedir_e, dt_rval_nukelog_nuker, dt_rval_nukelog_nukee, 25 | dt_rval_nukelog_unnuker, dt_rval_nukelog_reason, dt_rval_x_nukelog, 26 | dt_rval_xg_nukelog; 27 | 28 | __d_format_block nukelog_format_block, nukelog_format_block_batch, 29 | nukelog_format_block_exp; 30 | 31 | int 32 | gcb_nukelog (void *buffer, char *key, char *val); 33 | 34 | #endif /* LREF_NUKELOG_H_ */ 35 | -------------------------------------------------------------------------------- /src/lref_online.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_online.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_ONLINE_H_ 9 | #define LREF_ONLINE_H_ 10 | 11 | #include 12 | 13 | #define _MC_ONLINE_BTXFER "btxfer" 14 | #define _MC_ONLINE_BXFER "bxfer" 15 | #define _MC_ONLINE_GROUP "group" 16 | #define _MC_ONLINE_SSL "ssl" 17 | #define _MC_ONLINE_LUPDT "lupdtime" 18 | #define _MC_ONLINE_LXFRT "lxfertime" 19 | #define _MC_ONLINE_HOST "host" 20 | 21 | int 22 | online_format_block_comp (void *iarg, char *output); 23 | 24 | _d_rtv_lk ref_to_val_lk_online; 25 | 26 | __g_proc_rv dt_rval_online_ssl, dt_rval_online_group, dt_rval_online_time, 27 | dt_rval_online_lupdt, dt_rval_online_lxfrt, dt_rval_online_bxfer, 28 | dt_rval_online_btxfer, dt_rval_online_pid, dt_rval_online_rate, 29 | dt_rval_online_basedir, dt_rval_online_ndir, dt_rval_online_user, 30 | dt_rval_online_tag, dt_rval_online_status, dt_rval_online_host, 31 | dt_rval_online_dir, dt_rval_online_config; 32 | 33 | __d_ref_to_pval ref_to_val_ptr_online; 34 | 35 | __d_format_block online_format_block, online_format_block_batch, 36 | online_format_block_exp; 37 | 38 | #endif /* LREF_ONLINE_H_ */ 39 | -------------------------------------------------------------------------------- /src/lref_onliners.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_online.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_ONLINERS_H_ 9 | #define LREF_ONLINERS_H_ 10 | 11 | #include 12 | 13 | #define _MC_ONELINERS_MSG "msg" 14 | 15 | __g_proc_rv dt_rval_oneliners_time, dt_rval_oneliners_user, 16 | dt_rval_oneliners_group, dt_rval_oneliners_tag, dt_rval_oneliners_msg; 17 | 18 | _d_rtv_lk ref_to_val_lk_oneliners; 19 | 20 | __d_ref_to_pval ref_to_val_ptr_oneliners; 21 | 22 | __d_format_block oneliner_format_block, oneliner_format_block_batch, 23 | oneliner_format_block_exp; 24 | 25 | int 26 | gcb_oneliner (void *buffer, char *key, char *val); 27 | 28 | #endif /* LREF_ONLINE_H_ */ 29 | -------------------------------------------------------------------------------- /src/lref_sconf.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_sconf.h 3 | * 4 | * Created on: Dec 7, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_SCONF_H_ 9 | #define LREF_SCONF_H_ 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #include 16 | #include 17 | #include 18 | 19 | #define _MC_SCONF_FIELD "field" 20 | #define _MC_SCONF_MATCH "match" 21 | #define _MC_SCONF_INT32 "int" 22 | #define _MC_SCONF_INVERTM "invert" 23 | #define _MC_SCONF_TYPE "type" 24 | #define _MC_SCONF_UINT64 "uint64" 25 | #define _MC_SCONF_MSG "msg" 26 | #define _MC_SCONF_LCOMP "lcomp" 27 | #define _MC_SCONF_ICASE "icase" 28 | 29 | #define SCONF_MAX_MSG 512 30 | #define SCONF_MAX_REG_MATCH 4096 31 | 32 | __d_format_block sconf_format_block, sconf_format_block_batch, 33 | sconf_format_block_exp; 34 | 35 | __d_ref_to_pval ref_to_val_ptr_sconf; 36 | 37 | _d_rtv_lk ref_to_val_lk_sconf; 38 | 39 | int 40 | gcb_sconf (void *buffer, char *key, char *val); 41 | 42 | #pragma pack(push, 4) 43 | 44 | typedef struct ___d_sconf 45 | { 46 | int32_t i32; 47 | uint32_t ui32_1; 48 | uint32_t ui32_2; 49 | uint8_t invert; 50 | uint8_t type; 51 | uint8_t lcomp; 52 | uint8_t icase; 53 | uint64_t ui64; 54 | char match[SCONF_MAX_REG_MATCH]; 55 | char field[MAX_VAR_LEN]; 56 | char message[SCONF_MAX_MSG]; 57 | } _d_sconf, *__d_sconf; 58 | 59 | #pragma pack(pop) 60 | 61 | #define SC_SZ sizeof(_d_sconf) 62 | 63 | #endif /* LREF_SCONF_H_ */ 64 | -------------------------------------------------------------------------------- /src/lref_tvrage.h: -------------------------------------------------------------------------------- 1 | /* 2 | * lref_tvrage.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef LREF_TVRAGE_H_ 9 | #define LREF_TVRAGE_H_ 10 | 11 | #define _MC_TV_STARTED "started" 12 | #define _MC_TV_ENDED "ended" 13 | #define _MC_TV_SHOWID "showid" 14 | #define _MC_TV_SEASONS "seasons" 15 | #define _MC_TV_SYEAR "startyear" 16 | #define _MC_TV_EYEAR "endyear" 17 | #define _MC_TV_AIRDAY "airday" 18 | #define _MC_TV_AIRTIME "airtime" 19 | #define _MC_TV_COUNTRY "country" 20 | #define _MC_TV_LINK "link" 21 | #define _MC_TV_NAME "name" 22 | #define _MC_TV_CLASS "class" 23 | #define _MC_TV_NETWORK "network" 24 | 25 | #include 26 | 27 | #include 28 | #include 29 | 30 | __d_ref_to_pval ref_to_val_ptr_tv; 31 | _d_rtv_lk ref_to_val_lk_tvrage; 32 | 33 | __d_format_block tv_format_block, tv_format_block_batch, tv_format_block_exp; 34 | 35 | __g_proc_rv dt_rval_tvrage_dir, dt_rval_tvrage_basedir, dt_rval_tvrage_time, 36 | dt_rval_tvrage_ended, dt_rval_tvrage_started, dt_rval_tvrage_started, 37 | dt_rval_tvrage_seasons, dt_rval_tvrage_showid, dt_rval_tvrage_runtime, 38 | dt_rval_tvrage_startyear, dt_rval_tvrage_endyear, dt_rval_tvrage_mode, 39 | dt_rval_tvrage_airday, dt_rval_tvrage_airtime, dt_rval_tvrage_country, 40 | dt_rval_tvrage_link, dt_rval_tvrage_name, dt_rval_tvrage_status, 41 | dt_rval_tvrage_class, dt_rval_tvrage_genre, dt_rval_tvrage_network; 42 | 43 | int 44 | gcb_tv (void *buffer, char *key, char *val); 45 | 46 | #pragma pack(push, 4) 47 | 48 | typedef struct ___d_tvrage 49 | { 50 | char dirname[255]; 51 | int32_t timestamp; 52 | uint32_t showid; 53 | char name[128]; 54 | char link[128]; 55 | char country[24]; 56 | int32_t started; 57 | int32_t ended; 58 | uint16_t seasons; 59 | char status[64]; 60 | uint32_t runtime; 61 | char airtime[6]; 62 | char airday[32]; 63 | char class[64]; 64 | char genres[256]; 65 | uint16_t startyear; 66 | uint16_t endyear; 67 | char network[72]; 68 | uint8_t _d_unused[180]; /* Reserved for future use */ 69 | } _d_tvrage, *__d_tvrage; 70 | 71 | #pragma pack(pop) 72 | 73 | #define TV_SZ sizeof(_d_tvrage) 74 | 75 | #endif /* LREF_TVRAGE_H_ */ 76 | -------------------------------------------------------------------------------- /src/m_comp.h: -------------------------------------------------------------------------------- 1 | /* 2 | * m_comp.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef M_COMP_H_ 9 | #define M_COMP_H_ 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #define _D_DRT_HASREGEX (a32 << 10) 17 | 18 | typedef struct ___d_drt_h 19 | { 20 | uint32_t flags; 21 | char direc[1024]; 22 | __g_proc_v fp_rval1; 23 | __g_proc_v fp_rval2; 24 | uint32_t t_1; 25 | time_t ts_1; 26 | char c_1; 27 | size_t vp_off1; 28 | size_t vp_off2; 29 | __g_handle hdl; 30 | char *match; 31 | mda math; 32 | mda chains; 33 | regex_t preg; 34 | int regex_flags; 35 | uint16_t r_rep_l; 36 | uint8_t uc_1; 37 | void *st_ptr0; 38 | void *rt_cond; 39 | char *st_p; 40 | char *st_p0; 41 | void *st_p1; 42 | void *v_p0; 43 | void *v_p1; 44 | struct ___d_drt_h *mppd_next; 45 | uint64_t mppd_depth; 46 | struct ___d_drt_h *mppd_aux_next; 47 | char tp_b0[10000]; 48 | char *varg_l; 49 | mda sub_mech; 50 | uint32_t v_ui0; 51 | uint32_t v_ui1; 52 | int32_t v_i0; 53 | uint64_t ret0; 54 | void *chb0; 55 | void *chb1; 56 | } _d_drt_h, *__d_drt_h; 57 | 58 | #endif /* M_COMP_H_ */ 59 | -------------------------------------------------------------------------------- /src/m_general.h: -------------------------------------------------------------------------------- 1 | /* 2 | * m_general.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef M_GENERAL_H_ 9 | #define M_GENERAL_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | #include 16 | 17 | #define G_MATCH ((int)0) 18 | #define G_NOMATCH ((int)1) 19 | 20 | #define F_GM_ISREGEX (a32 << 1) 21 | #define F_GM_ISMATCH (a32 << 2) 22 | #define F_GM_ISLOM (a32 << 3) 23 | #define F_GM_IMATCH (a32 << 4) 24 | #define F_GM_NAND (a32 << 5) 25 | #define F_GM_NOR (a32 << 6) 26 | #define F_GM_ISACCU (a32 << 7) 27 | #define F_GM_TFD (a32 << 8) 28 | #define F_GM_ISFNAME (a32 << 9) 29 | #define F_GM_LOM_SET (a32 << 10) 30 | #define F_GM_IS_MOBJ (a32 << 11) 31 | #define F_GM_ISSET (a32 << 12) 32 | 33 | #define F_GM_TYPES (F_GM_ISREGEX|F_GM_ISMATCH|F_GM_ISLOM|F_GM_ISFNAME) 34 | #define F_GM_TYPES_STR (F_GM_ISREGEX|F_GM_ISMATCH|F_GM_ISFNAME) 35 | 36 | typedef float 37 | (*g_tf_p) (void *base, size_t offset); 38 | typedef uint64_t 39 | (*g_t_p) (void *base, size_t offset); 40 | typedef int64_t 41 | (*g_ts_p) (void *base, size_t offset); 42 | typedef int 43 | (*g_op) (int s, int d); 44 | void 45 | g_ipcbm (void *hdl, pmda md, int *r_p, void *ptr); 46 | int 47 | g_filter (__g_handle hdl, pmda md); 48 | int 49 | g_bmatch (void *, __g_handle, pmda md); 50 | int 51 | g_bmatch_dummy (void *d_ptr, __g_handle hdl, pmda md); 52 | 53 | typedef int 54 | (*pt_g_bmatch) (void *, __g_handle, pmda md); 55 | 56 | int 57 | opt_g_operator_or (void *arg, int m, void *opt); 58 | int 59 | opt_g_operator_and (void *arg, int m, void *opt); 60 | 61 | int 62 | opt_g_m_raise_level (void *arg, int m, void *opt); 63 | int 64 | opt_g_m_lower_level (void *arg, int m, void *opt); 65 | 66 | typedef struct ___g_lom 67 | { 68 | int result; 69 | /* --- */ 70 | uint32_t flags; 71 | g_t_p g_t_ptr_left; 72 | g_ts_p g_ts_ptr_left; 73 | g_t_p g_t_ptr_right; 74 | g_ts_p g_ts_ptr_right; 75 | g_tf_p g_tf_ptr_left; 76 | g_tf_p g_tf_ptr_right; 77 | int 78 | (*g_icomp_ptr) (uint64_t s, uint64_t d); 79 | int 80 | (*g_iscomp_ptr) (int64_t s, int64_t d); 81 | int 82 | (*g_fcomp_ptr) (float s, float d); 83 | int 84 | (*g_lom_vp) (void *d_ptr, void * lom); 85 | g_op g_oper_ptr; 86 | 87 | void *left, *right; 88 | uint64_t t_left, t_right; 89 | int64_t ts_left, ts_right; 90 | float tf_left, tf_right; 91 | /* --- */ 92 | size_t t_l_off, t_r_off; 93 | void *p_glob_stor; 94 | mda math_l; 95 | mda math_r; 96 | mda chains; 97 | int vb_l, vb_r; 98 | } _g_lom, *__g_lom; 99 | 100 | typedef struct ___g_match_h 101 | { 102 | uint32_t flags; 103 | char *match, *field; 104 | int match_i_m, regex_flags, fname_flags; 105 | regex_t preg; 106 | mda lom; 107 | g_op g_oper_ptr; 108 | __g_proc_v pmstr_cb; 109 | _d_drt_h dtr; 110 | char *data; 111 | void *hdl_ref; 112 | pmda next; 113 | } _g_match, *__g_match; 114 | 115 | mda _match_rr; 116 | pmda _match_clvl; 117 | 118 | typedef struct ___last_match 119 | { 120 | uint32_t flags; 121 | void *ptr; 122 | } _l_match, *__l_match; 123 | 124 | __g_match 125 | g_global_register_match (void); 126 | int 127 | do_string_match (__g_handle hdl, void *d_ptr, __g_match _gm); 128 | 129 | _l_match _match_rr_l; 130 | 131 | #define MAX_RT_C_EXEC 4096 132 | 133 | typedef struct ___rt_conditional 134 | { 135 | _g_match match; 136 | __g_proc_v p_exec; 137 | } _rt_c, *__rt_c; 138 | 139 | #endif /* M_GENERAL_H_ */ 140 | -------------------------------------------------------------------------------- /src/m_lom.h: -------------------------------------------------------------------------------- 1 | /* 2 | * m_lom.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | 14 | #ifndef M_LOM_H_ 15 | #define M_LOM_H_ 16 | 17 | #define F_LM_CPRG (a32 << 1) 18 | #define F_LM_LOM (a32 << 2) 19 | 20 | #define F_LM_TYPES (F_LM_CPRG|F_LM_LOM) 21 | 22 | #define F_LOM_INT (a32 << 1) 23 | #define F_LOM_INT_S (a32 << 2) 24 | #define F_LOM_FLOAT (a32 << 3) 25 | #define F_LOM_LVAR_KNOWN (a32 << 4) 26 | #define F_LOM_RVAR_KNOWN (a32 << 5) 27 | #define F_LOM_HASOPER (a32 << 6) 28 | #define F_LOM_FLOAT_DBL (a32 << 7) 29 | #define F_LOM_IS_LVAR_MATH (a32 << 8) 30 | #define F_LOM_IS_RVAR_MATH (a32 << 9) 31 | 32 | #define F_LOM_TYPES (F_LOM_FLOAT|F_LOM_INT|F_LOM_INT_S) 33 | #define F_LOM_VAR_KNOWN (F_LOM_LVAR_KNOWN|F_LOM_RVAR_KNOWN) 34 | 35 | #define F_GLT_LEFT (a32 << 1) 36 | #define F_GLT_RIGHT (a32 << 2) 37 | 38 | #define F_GLT_DIRECT (F_GLT_LEFT|F_GLT_RIGHT) 39 | 40 | #define MAX_LOM_STRING 4096 41 | 42 | typedef struct ___lom_strings_header 43 | { 44 | uint32_t flags; 45 | g_op g_oper_ptr; 46 | __g_match m_ref; 47 | char string[8192]; 48 | } _lom_s_h, *__lom_s_h; 49 | 50 | #define G_LOM_VAR_L(x, y, d_ptr) { \ 51 | if (lom->g_tf_ptr_left) \ 52 | { \ 53 | lom->y = (x)lom->g_tf_ptr_left(d_ptr, lom->t_l_off); \ 54 | } \ 55 | else if (lom->g_t_ptr_left) \ 56 | { \ 57 | lom->y = (x) lom->g_t_ptr_left(d_ptr, lom->t_l_off); \ 58 | } \ 59 | else if (lom->g_ts_ptr_left) \ 60 | { \ 61 | lom->y = (x) lom->g_ts_ptr_left(d_ptr, lom->t_l_off); \ 62 | } \ 63 | if ((lom->flags & F_LOM_IS_LVAR_MATH)) { \ 64 | g_math_res(d_ptr, &lom->math_l, &lom->y);\ 65 | } \ 66 | } 67 | 68 | #define G_LOM_VAR_R(x,y, d_ptr) { \ 69 | if (lom->g_tf_ptr_right) \ 70 | { \ 71 | lom->y = (x)lom->g_tf_ptr_right(d_ptr, lom->t_r_off); \ 72 | } \ 73 | else if (lom->g_t_ptr_right) \ 74 | { \ 75 | lom->y = (x) lom->g_t_ptr_right(d_ptr, lom->t_r_off); \ 76 | } \ 77 | else if (lom->g_ts_ptr_right) \ 78 | { \ 79 | lom->y = (x) lom->g_ts_ptr_right(d_ptr, lom->t_r_off); \ 80 | } \ 81 | if ((lom->flags & F_LOM_IS_RVAR_MATH)) { \ 82 | g_math_res(d_ptr, &lom->math_r, &lom->y);\ 83 | } \ 84 | } 85 | 86 | #define G_LOM_VAR(x,y, d_ptr, g_ptr) { \ 87 | lom->y = (x)lom->g_ptr(d_ptr, lom->t_r_off); \ 88 | } 89 | 90 | typedef int 91 | __d_lom_vp (void *d_ptr, void *_lom); 92 | 93 | __d_lom_vp g_lom_var_int, g_lom_var_uint, g_lom_var, g_lom_var_math, 94 | g_lom_var_float, g_lom_var_accu_uint, g_lom_var_accu_int, 95 | g_lom_var_accu_float, g_lom_var_set_uint, g_lom_var_set_int, 96 | g_lom_var_set_float; 97 | int 98 | g_lom_match (__g_handle hdl, void *d_ptr, __g_match _gm); 99 | int 100 | g_lom_accu (__g_handle hdl, void *d_ptr, pmda _accumulator); 101 | int 102 | g_load_lom (__g_handle hdl); 103 | int 104 | g_process_lom_string (__g_handle hdl, char *string, __g_match _gm, int *ret, 105 | uint32_t flags); 106 | int 107 | g_build_lom_packet (__g_handle hdl, char *left, char *right, char *comp, 108 | size_t comp_l, char *oper, size_t oper_l, __g_match match, 109 | __g_lom *ret, uint32_t flags); 110 | 111 | int 112 | g_get_lom_g_t_ptr (__g_handle hdl, char *field, __g_lom lom, uint32_t flags); 113 | int 114 | g_get_lom_alignment (__g_lom lom, uint32_t flags, int *vb, size_t off); 115 | 116 | int 117 | opt_g_lom (void *arg, int m, uint32_t flags); 118 | int 119 | g_build_lom_packet_bare (__g_handle hdl, __g_lom lom, char *field, void *right, 120 | void *comp_set[], g_op lop); 121 | int 122 | g_lom_match_bare (__g_handle hdl, void *d_ptr, __g_lom lom); 123 | 124 | void *_lcs_isequal[3]; 125 | void *_lcs_ishigher[3]; 126 | void *_lcs_islower[3]; 127 | void *_lcs_islowerorequal[3]; 128 | void *_lcs_ishigherorequal[3]; 129 | void *_lcs_isnotequal[3]; 130 | void *_lcs_isnot[3]; 131 | 132 | #endif /* M_LOM_H_ */ 133 | -------------------------------------------------------------------------------- /src/m_string.h: -------------------------------------------------------------------------------- 1 | /* 2 | * m_string.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef M_STRING_H_ 9 | #define M_STRING_H_ 10 | 11 | #define MAX_CPRG_STRING 4096 12 | 13 | #include 14 | 15 | #include 16 | 17 | int 18 | g_load_strm (__g_handle hdl); 19 | int 20 | g_cprg (void *arg, int m, int match_i_m, int reg_i_m, int regex_flags, 21 | uint32_t flags, void *opt); 22 | int 23 | g_commit_strm_regex (__g_handle hdl, char *field, char *m, int reg_i_m, 24 | int regex_flags, uint32_t flags); 25 | 26 | #endif /* M_STRING_H_ */ 27 | -------------------------------------------------------------------------------- /src/macros_t.h: -------------------------------------------------------------------------------- 1 | /* 2 | * macros_t.h 3 | * 4 | * Created on: Dec 5, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef MACROS_T_H_ 9 | #define MACROS_T_H_ 10 | 11 | #define F_MMODE_EXEC (a32 << 1) 12 | #define F_MMODE_LIST (a32 << 2) 13 | 14 | #define SSD_MAX_LINE_SIZE 32768 15 | #define SSD_MAX_LINE_PROC 15000 16 | //#define SSD_MAX_FILE_SIZE (V_MB*32) 17 | 18 | #include 19 | 20 | #include 21 | #include 22 | 23 | int 24 | ref_to_val_macro (void *arg, char *match, char *output, size_t max_size, 25 | void *mppd); 26 | char ** 27 | process_macro (void * arg, char **out); 28 | 29 | int 30 | ssd_4macro (char *name, unsigned char type, void *arg, __g_eds eds); 31 | 32 | int 33 | list_macros (void); 34 | 35 | _d_rtv_lk ref_to_val_lk_macro; 36 | 37 | #endif /* MACROS_T_H_ */ 38 | -------------------------------------------------------------------------------- /src/mc_glob.h: -------------------------------------------------------------------------------- 1 | /* 2 | * mc_x.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef MC_GLOB_H_ 9 | #define MC_GLOB_H_ 10 | 11 | #define _MC_GLOB_DIR "dir" 12 | #define _MC_GLOB_BASEDIR "basedir" 13 | #define _MC_GLOB_DIRNAME "ndir" 14 | #define _MC_GLOB_MODE "mode" 15 | #define _MC_GLOB_PID "pid" 16 | #define _MC_GLOB_USER "user" 17 | #define _MC_GLOB_USERNAME "nuser" 18 | #define _MC_GLOB_GROUP "group" 19 | #define _MC_GLOB_GROUPNAME "ngroup" 20 | #define _MC_GLOB_TIME "time" 21 | #define _MC_GLOB_SIZE "size" 22 | #define _MC_GLOB_SCORE "score" 23 | #define _MC_GLOB_RUNTIME "runtime" 24 | #define _MC_GLOB_LOGON "logon" 25 | #define _MC_GLOB_LOGOFF "logoff" 26 | #define _MC_GLOB_DOWNLOAD "download" 27 | #define _MC_GLOB_UPLOAD "upload" 28 | #define _MC_GLOB_STATUS "status" 29 | #define _MC_GLOB_TAG "tag" 30 | #define _MC_GLOB_GENRE "genre" 31 | #define _MC_GLOB_XREF "x:" 32 | #define _MC_GLOB_XGREF "xg:" 33 | #define _MC_GLOB_FILE "file" 34 | #define _MC_GLOB_U64G "u64glob" 35 | #define _MC_GLOB_S64G "s64glob" 36 | #define _MC_GLOB_F32G "f32glob" 37 | #define _MC_GLOB_CURTIME "curtime" 38 | 39 | #endif /* MC_GLOB_H_ */ 40 | -------------------------------------------------------------------------------- /src/memory_t.h: -------------------------------------------------------------------------------- 1 | /* 2 | * memory.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef MEMORY_H_ 9 | #define MEMORY_H_ 10 | 11 | //#include 12 | //#include 13 | 14 | #include 15 | #include 16 | 17 | #define F_MDA_REFPTR ((uint32_t)1 << 1) 18 | #define F_MDA_FREE ((uint32_t)1 << 2) 19 | #define F_MDA_REUSE ((uint32_t)1 << 3) 20 | #define F_MDA_WAS_REUSED ((uint32_t)1 << 4) 21 | #define F_MDA_EOF ((uint32_t)1 << 5) 22 | #define F_MDA_FIRST_REUSED ((uint32_t)1 << 6) 23 | #define F_MDA_ARR_DIST ((uint32_t)1 << 7) 24 | #define F_MDA_NO_REALLOC ((uint32_t)1 << 8) 25 | #define F_MDA_ORPHANED ((uint32_t)1 << 10) 26 | 27 | #define F_MDA_ST_MISC00 ((uint32_t)1 << 15) 28 | #define F_MDA_ST_MISC01 ((uint32_t)1 << 16) 29 | #define F_MDA_ST_MISC02 ((uint32_t)1 << 11) 30 | 31 | #define MDA_MDALLOC_RE ((uint32_t)1 << 1) 32 | 33 | typedef struct mda_object 34 | { 35 | void *ptr; 36 | struct mda_object *next; 37 | struct mda_object *prev; 38 | }*p_md_obj, md_obj; 39 | 40 | #ifdef _G_SSYS_THREAD 41 | #include 42 | #endif 43 | 44 | typedef struct mda_header 45 | { 46 | p_md_obj objects; /* holds references */ 47 | p_md_obj pos, r_pos, c_pos, first, last; 48 | off_t offset, r_offset, count, hitcnt, rescnt; 49 | uint32_t flags; 50 | void *lref_ptr; 51 | #ifdef _G_SSYS_THREAD 52 | pthread_mutex_t mutex; 53 | #endif 54 | } mda, *pmda; 55 | 56 | #pragma pack(push, 4) 57 | 58 | typedef struct ___nn_2x64 59 | { 60 | uint64_t u00, u01; 61 | uint16_t u16_00; 62 | } _nn_2x64, *__nn_2x64; 63 | 64 | #pragma pack(pop) 65 | 66 | int 67 | md_init (pmda md, int nm); 68 | p_md_obj 69 | md_first (pmda md); 70 | int 71 | md_free (pmda md); 72 | int 73 | md_g_free_l (pmda md); 74 | int 75 | md_g_free_cb (pmda md, int 76 | (*cb) (void *)); 77 | ssize_t 78 | md_relink (pmda md); 79 | ssize_t 80 | md_relink_n (pmda md, off_t base); 81 | p_md_obj 82 | md_first (pmda md); 83 | p_md_obj 84 | md_last (pmda md); 85 | void * 86 | md_swap_s (pmda md, p_md_obj md_o1, p_md_obj md_o2); 87 | void * 88 | md_swap (pmda md, p_md_obj md_o1, p_md_obj md_o2); 89 | void * 90 | md_unlink (pmda md, p_md_obj md_o); 91 | void * 92 | md_alloc (pmda md, int b); 93 | int 94 | md_copy (pmda source, pmda dest, size_t block_sz, int 95 | (*cb) (void *source, void *dest, void *ptr)); 96 | int 97 | md_copy_le (pmda source, pmda dest, size_t block_sz, int 98 | (*cb) (void *source, void *dest, void *ptr)); 99 | int 100 | is_memregion_null (void *addr, size_t size); 101 | int 102 | md_md_to_array (pmda source, void **dest); 103 | int 104 | md_array_to_md (void ** source, pmda dest); 105 | 106 | #define F_MDALLOC_NOLINK ((uint32_t)1 << 1) 107 | 108 | void * 109 | md_alloc_le (pmda md, size_t b, uint32_t flags, void *refptr); 110 | void * 111 | md_unlink_le (pmda md, p_md_obj md_o); 112 | int 113 | md_init_le (pmda md, int nm); 114 | 115 | off_t 116 | register_count (pmda thread_r); 117 | 118 | #ifdef _G_SSYS_THREAD 119 | off_t 120 | md_get_off_ts (pmda md); 121 | #endif 122 | 123 | #if HAVE_MALLOC == 0 124 | 125 | #undef malloc 126 | 127 | #include 128 | 129 | void * 130 | malloc (); 131 | 132 | /* Allocate an N-byte block of memory from the heap. 133 | If N is zero, allocate a 1-byte block. */ 134 | 135 | void* 136 | rpl_malloc (size_t n); 137 | #endif 138 | 139 | #endif /* MEMORY_H_ */ 140 | -------------------------------------------------------------------------------- /src/misc.h: -------------------------------------------------------------------------------- 1 | /* 2 | * misc.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef MISC_H_ 9 | #define MISC_H_ 10 | 11 | #include 12 | 13 | #include 14 | 15 | #define F_MSG_TYPE_ANY MAX_uint32_t 16 | #define F_MSG_TYPE_EXCEPTION ((uint32_t)1 << 1) 17 | #define F_MSG_TYPE_ERROR ((uint32_t)1 << 2) 18 | #define F_MSG_TYPE_WARNING ((uint32_t)1 << 3) 19 | #define F_MSG_TYPE_MACRO ((uint32_t)1 << 4) 20 | #define F_MSG_TYPE_NOTICE ((uint32_t)1 << 5) 21 | #define F_MSG_TYPE_INFO ((uint32_t)1 << 6) 22 | #define F_MSG_TYPE_STATS ((uint32_t)1 << 7) 23 | #define F_MSG_TYPE_OTHER ((uint32_t)1 << 8) 24 | #define F_MSG_TYPE_DEBUG0 ((uint32_t)1 << 9) 25 | #define F_MSG_TYPE_DEBUG1 ((uint32_t)1 << 10) 26 | #define F_MSG_TYPE_DEBUG2 ((uint32_t)1 << 11) 27 | #define F_MSG_TYPE_DEBUG3 ((uint32_t)1 << 12) 28 | #define F_MSG_TYPE_DEBUG4 ((uint32_t)1 << 13) 29 | #define F_MSG_TYPE_DEBUG5 ((uint32_t)1 << 14) 30 | #define F_MSG_TYPE_DEBUG6 ((uint32_t)1 << 15) 31 | 32 | #define F_MSG_TYPE_EEW (F_MSG_TYPE_EXCEPTION|F_MSG_TYPE_ERROR|F_MSG_TYPE_WARNING|F_MSG_TYPE_MACRO) 33 | #define F_MSG_TYPE_NORMAL (F_MSG_TYPE_EEW|F_MSG_TYPE_NOTICE|F_MSG_TYPE_OTHER|F_MSG_TYPE_STATS|F_MSG_TYPE_INFO|F_MSG_TYPE_MACRO) 34 | #define F_MSG_TYPE_DEBUG (F_MSG_TYPE_DEBUG0|F_MSG_TYPE_DEBUG1|F_MSG_TYPE_DEBUG2|F_MSG_TYPE_DEBUG3|F_MSG_TYPE_DEBUG4|F_MSG_TYPE_DEBUG5|F_MSG_TYPE_DEBUG6) 35 | 36 | int 37 | enable_logging (void); 38 | char * 39 | build_data_path (char *file, char *path, char *sd); 40 | uint32_t 41 | get_msg_type (char *msg); 42 | void 43 | w_log (char *w); 44 | int 45 | g_print_info (void); 46 | int 47 | g_memcomp (const void *p1, const void *p2, off_t size); 48 | char * 49 | g_bitstr (uint64_t value, uint8_t bits, char *buffer); 50 | 51 | uint32_t 52 | opt_get_msg_type (char *msg); 53 | int 54 | build_msg_reg (char *arg, uint32_t *opt_r); 55 | 56 | uint32_t STDLOG_LVL; 57 | 58 | int 59 | print_version_long (void *arg, int m, void *opt); 60 | 61 | int 62 | (*print_str) (const char * volatile buf, ...); 63 | 64 | #endif /* MISC_H_ */ 65 | -------------------------------------------------------------------------------- /src/net_cmdproc.c: -------------------------------------------------------------------------------- 1 | /* 2 | * net_cmdproc.c 3 | * 4 | * Created on: Oct 23, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #include "hasht.h" 9 | #include "net_io.h" 10 | #include "misc.h" 11 | 12 | #include "net_cmdproc.h" 13 | 14 | #include 15 | 16 | void 17 | nc_register (hashtable_t *ht, char *cmd, _ncp call) 18 | { 19 | size_t cmdlen = strlen (cmd) + 1; 20 | 21 | __nc_proc data = calloc (1, sizeof(_nc_proc)); 22 | 23 | if ( NULL == data) 24 | { 25 | print_str ("ERROR: nc_register: out of memory\n"); 26 | abort (); 27 | } 28 | 29 | data->call = call; 30 | 31 | ht_set (ht, (unsigned char*) cmd, cmdlen, (void*) data, sizeof(_nc_proc)); 32 | } 33 | 34 | __nc_proc 35 | nc_get (hashtable_t *ht, char *cmd) 36 | { 37 | size_t cmdlen = strlen (cmd) + 1; 38 | 39 | return ht_get (ht, (unsigned char*) cmd, cmdlen); 40 | } 41 | 42 | int 43 | nc_proc (hashtable_t *ht, __sock pso, char *cmd, char *args) 44 | { 45 | size_t cmdlen = strlen (cmd) + 1; 46 | __nc_proc ncp; 47 | 48 | if ( NULL == (ncp = ht_get (ht, (unsigned char*) cmd, cmdlen))) 49 | { 50 | return -2; 51 | } 52 | 53 | return ncp->call (pso, cmd, args); 54 | } 55 | -------------------------------------------------------------------------------- /src/net_cmdproc.h: -------------------------------------------------------------------------------- 1 | /* 2 | * net_cmdproc.h 3 | * 4 | * Created on: Oct 23, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SRC_NET_CMDPROC_H_ 9 | #define SRC_NET_CMDPROC_H_ 10 | 11 | #include "hasht.h" 12 | #include "net_io.h" 13 | 14 | typedef int 15 | (*_ncp) (__sock pso, char *cmd, char *args); 16 | 17 | typedef struct __net_c_proc 18 | { 19 | _ncp call; 20 | } _nc_proc, *__nc_proc; 21 | 22 | void 23 | nc_register (hashtable_t *ht, char *cmd, _ncp ncp); 24 | __nc_proc 25 | nc_get (hashtable_t *ht, char *cmd); 26 | int 27 | nc_proc (hashtable_t *ht, __sock pso, char *cmd, char *args); 28 | 29 | 30 | #endif /* SRC_NET_CMDPROC_H_ */ 31 | -------------------------------------------------------------------------------- /src/net_fs.h: -------------------------------------------------------------------------------- 1 | /* 2 | * net_fs.h 3 | * 4 | * Created on: Mar 25, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SRC_NET_FS_H_ 9 | #define SRC_NET_FS_H_ 10 | 11 | #define PROT_CODE_FS 0xAC 12 | 13 | #include 14 | 15 | #include 16 | #include 17 | 18 | #define CODE_FS_RQH_SEND 1 19 | #define CODE_FS_RQH_STAT 2 20 | #define CODE_FS_RESP_NOTIFY 3 21 | #define CODE_FS_RQH_S_RESP 4 22 | 23 | #define F_RQH_OP_FAILED ((uint8_t)1 << 1) 24 | #define F_RQH_OP_OK ((uint8_t)1 << 2) 25 | 26 | #pragma pack(push, 4) 27 | 28 | typedef struct ___fs_request_header 29 | { 30 | uint8_t code, status_flags; 31 | uint8_t m00_8, m01_8; 32 | int32_t err_code; 33 | uint64_t offset, size; 34 | uint32_t ex_len; 35 | } _fs_req_h, *__fs_req_h; 36 | 37 | typedef struct __fs_req_h_encaps 38 | { 39 | _bp_header head; 40 | _fs_req_h body; 41 | } _fs_rh_enc, *__fs_rh_enc; 42 | 43 | typedef struct ___fs_tmstat_header 44 | { 45 | int32_t sec, nsec; 46 | } _fs_tms, *__fs_tms; 47 | 48 | typedef struct ___fs_stat_header 49 | { 50 | uint64_t size; 51 | uint32_t uid, gid; 52 | _fs_tms mtime, ctime, atime; 53 | uint64_t file_offset, file_size; 54 | } _fs_hstat, *__fs_hstat; 55 | 56 | #pragma pack(pop) 57 | 58 | #define F_FS_STSOCK_XFER_R ((uint64_t)1 << 1) 59 | #define F_FS_STSOCK_XFER_W ((uint64_t)1 << 2) 60 | #define F_FS_STSOCK_FASSOC ((uint64_t)1 << 3) 61 | #define F_FS_STSOCK_XFER_FIN ((uint64_t)1 << 4) 62 | 63 | #define F_FS_STSOCK_HANDLE_OPEN ((uint64_t)1 << 32) 64 | 65 | #define FS_STSS_XFER_R_WSTAT 1 66 | #define FS_STSS_XFER_R_WDATA 2 67 | #define FS_STSS_XFER_RECV 3 68 | #define FS_STSS_XFER_SEND 4 69 | #define FS_STSS_XFER_R_WSHA 5 70 | 71 | typedef int 72 | (*_nfs_ncb) (__sock pso, __fs_rh_enc packet, void *arg); 73 | typedef int 74 | nfs_ncb (__sock pso, __fs_rh_enc packet, void *arg); 75 | 76 | #include 77 | 78 | typedef struct ___sha_v 79 | { 80 | SHA_CTX context; 81 | _pid_sha1 value; 82 | } _sha_v, *__sha_v; 83 | 84 | #include 85 | 86 | typedef struct ___fs_state_sock 87 | { 88 | uint64_t state; 89 | uint16_t stage; 90 | _fs_hstat hstat; 91 | int handle; 92 | _nfs_ncb notify_cb; 93 | uint64_t data_in, data_out; 94 | char data0[PATH_MAX], data1[PATH_MAX]; 95 | _sha_v sha_00; 96 | _t_rcall xfin; 97 | time_t l_stat; 98 | uint32_t cyc_data_last; 99 | } _fs_sts, *__fs_sts; 100 | 101 | #define BASELINE_FS_TCODE_XFER "XFER" 102 | 103 | nfs_ncb net_baseline_fsproto_xfer_stat_ok, net_baseline_fsproto_xfer_in_ok, 104 | net_baseline_fsproto_default; 105 | 106 | p_sc_cb net_fs_socket_destroy_rc0, net_fs_clean_handles; 107 | 108 | int 109 | net_baseline_fsproto (__sock pso, pmda base, pmda threadr, void *data); 110 | int 111 | net_baseline_fsproto_send (__sock pso, pmda base, pmda threadr, void *data); 112 | int 113 | net_baseline_fsproto_recv (__sock pso, pmda base, pmda threadr, void *data); 114 | __fs_rh_enc 115 | net_fs_compile_filereq (int code, char *data, void *arg); 116 | __fs_rh_enc 117 | net_fs_compile_breq (int code, unsigned char *data, size_t p_len, void *arg); 118 | __fs_rh_enc 119 | net_fs_compile_hstat (__fs_hstat data, void *arg); 120 | 121 | int 122 | net_baseline_fsproto_gstat (char *file, __fs_hstat data); 123 | 124 | void 125 | net_fs_initialize_sts (__sock pso); 126 | int 127 | net_fs_send_xfer_req (__sock pso, uint64_t offset, uint64_t size, char *rpath); 128 | int 129 | net_fs_socket_init1_req_xfer (__sock pso); 130 | 131 | #endif /* SRC_NET_FS_H_ */ 132 | -------------------------------------------------------------------------------- /src/net_fsjproc.c: -------------------------------------------------------------------------------- 1 | /* 2 | * net_fsjproc.c 3 | * 4 | * Created on: Apr 10, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #include "net_fsjproc.h" 9 | 10 | -------------------------------------------------------------------------------- /src/net_fsjproc.h: -------------------------------------------------------------------------------- 1 | /* 2 | * net_fsjproc.h 3 | * 4 | * Created on: Apr 10, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SRC_NET_FSJPROC_H_ 9 | #define SRC_NET_FSJPROC_H_ 10 | 11 | #include 12 | #include 13 | 14 | #define F_FS_JENT_ST_DONE ((uint32_t)1 << 1) 15 | 16 | typedef struct ___fs_job_entity 17 | { 18 | pthread_mutex_t mutex; 19 | char *path; 20 | uint64_t offset, blk_size; 21 | uint32_t status; 22 | } _fs_jent, *__fs_jent; 23 | 24 | #endif /* SRC_NET_FSJPROC_H_ */ 25 | -------------------------------------------------------------------------------- /src/net_ftp.h: -------------------------------------------------------------------------------- 1 | /* 2 | * net_ftp.h 3 | * 4 | * Created on: Oct 23, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SRC_NET_FTP_H_ 9 | #define SRC_NET_FTP_H_ 10 | 11 | #define NET_FTP_MAX_MSG_SIZE 4096 12 | 13 | #include "hasht.h" 14 | 15 | #include "net_io.h" 16 | #include "memory_t.h" 17 | 18 | hashtable_t *ftp_cmd; 19 | 20 | #define F_FTP_ST_MODE_PASSIVE (uint32_t)1 << 1 21 | #define F_FTP_ST_MODE_HALTED (uint32_t)1 << 2 22 | #define F_FTP_ST_DATA_COMPLETED (uint32_t) 1 << 3 23 | 24 | #define F_FTP_DESTROYED (uint32_t)1 << 1 25 | #define F_FTP_SSLDATA (uint32_t)1 << 2 26 | #define F_FTP_PBSZ (uint32_t)1 << 3 27 | 28 | typedef struct ___fsd_info 29 | { 30 | //__do pool; // current pool 31 | //pthread_mutex_t mutex; 32 | char cwd[PATH_MAX]; 33 | _ipr l_ip; 34 | uint32_t status, flags; 35 | pmda pasv_socks; 36 | __sock ctl; 37 | uint8_t type; 38 | time_t t00; 39 | _t_rcall task_call; 40 | } _fsd_info, *__fsd_info; 41 | 42 | typedef struct _pasv_range 43 | { 44 | uint16_t low; 45 | uint16_t high; 46 | } _prange, *__prange; 47 | 48 | typedef struct ___ftp_opt 49 | { 50 | _prange pasv_ports; 51 | } _ftp_opt, *__ftp_opt; 52 | 53 | _ftp_opt ftp_opt; 54 | 55 | #include 56 | 57 | #define F_FTP_STATE_PASV_IP (uint32_t)1 << 1 58 | 59 | typedef struct ___ftp_state 60 | { 61 | pthread_mutex_t mutex; 62 | _ipr pasv; 63 | uint16_t pasv_ports; 64 | uint32_t flags; 65 | hashtable_t *used_pasv_ports; 66 | } _ftp_st, *__ftp_st; 67 | 68 | _ftp_st ftp_state; 69 | 70 | int 71 | net_baseline_ftp (__sock pso, pmda base, pmda threadr, void *data); 72 | int 73 | net_ftp_ctl_socket_init1_accept (__sock pso); 74 | int 75 | net_ftp_ctl_socket_rc0_destroy (__sock pso); 76 | int 77 | net_ftp_msg_send (__sock pso, int code, char *message, ...); 78 | int 79 | net_ftp_msg_send_q (__sock pso, int code, char *message, ...); 80 | void 81 | net_ftp_init (hashtable_t *ht); 82 | 83 | #endif /* SRC_NET_FTP_H_ */ 84 | -------------------------------------------------------------------------------- /src/net_gfs.h: -------------------------------------------------------------------------------- 1 | /* 2 | * net_gfs.h 3 | * 4 | * Created on: Mar 28, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SRC_NET_GFS_H_ 9 | #define SRC_NET_GFS_H_ 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #include "net_io.h" 16 | 17 | #define THREAD_ROLE_FS_WORKER 0x2 18 | 19 | #define FS_GFS_JOB_DBLOCK_READY ((uint32_t)1 << 1) 20 | #define FS_GFS_JOB_DBLOCK_DONE ((uint32_t)1 << 2) 21 | 22 | typedef struct ___gfs_job_dblock 23 | { 24 | ssize_t offset; 25 | ssize_t size; 26 | uint32_t status; 27 | __sock pso; 28 | pthread_mutex_t mutex; 29 | } _gfs_jdb, *__gfs_jdb; 30 | 31 | #define FS_GFS_JOB_LOPEN ((uint32_t)1 << 1) 32 | #define FS_GFS_JOB_LFAILED ((uint32_t)1 << 2) 33 | #define FS_GFS_JOB_STAT ((uint32_t)1 << 3) 34 | #define FS_GFS_JOB_STATREQUESTED ((uint32_t)1 << 4) 35 | 36 | #include "memory_t.h" 37 | 38 | typedef struct ___gfs_job 39 | { 40 | int id; 41 | char *link; 42 | char vb_0[PATH_MAX]; 43 | FILE *dump; 44 | mda blocks; 45 | mda socks; 46 | uint32_t status; 47 | pthread_t thread; 48 | pthread_mutex_t mutex; 49 | } _gfs, *__gfs; 50 | 51 | mda fs_jobs; 52 | 53 | int 54 | fs_worker (void *args); 55 | int 56 | net_fs_socket_destroy_gfs (__sock pso); 57 | int 58 | net_fs_socket_init1 (__sock pso); 59 | __gfs 60 | fs_job_add (pmda jobs); 61 | int 62 | fs_link_socks_to_job (__gfs job, pmda psockr); 63 | 64 | #endif /* SRC_NET_GFS_H_ */ 65 | -------------------------------------------------------------------------------- /src/net_proto.h: -------------------------------------------------------------------------------- 1 | /* 2 | * net_proto.h 3 | * 4 | * Created on: Mar 9, 2014 5 | * Author: reboot 6 | */ 7 | #ifdef _G_SSYS_NET 8 | 9 | #ifndef NET_PROTO_H_ 10 | #define NET_PROTO_H_ 11 | 12 | #define PROT_CODE_BASELINE_PROTO_VERSION 0x76 13 | #define PROT_CODE_BASELINE_KEEPALIVE 0x2 14 | 15 | #define BASELINE_PROTOCOL_VERSION_MAJOR 0 16 | #define BASELINE_PROTOCOL_VERSION_MINOR 1 17 | 18 | #include 19 | 20 | typedef struct __net_proto_24_bit_network_address 21 | { 22 | uint8_t b_1; 23 | uint8_t b_2; 24 | uint8_t b_3; 25 | } _np_netaddr24; 26 | 27 | #include 28 | 29 | typedef struct __net_proto_160_bit_network_address 30 | { 31 | unsigned char data[SHA_DIGEST_LENGTH]; 32 | } _netaddr_sha160; 33 | 34 | typedef struct __net_proto_160_bit_auth_key 35 | { 36 | unsigned char data[SHA_DIGEST_LENGTH]; 37 | } _net_auth_key; 38 | 39 | typedef struct __net_proto_160_bit_sha 40 | { 41 | unsigned char data[SHA_DIGEST_LENGTH]; 42 | } _gen_sha; 43 | 44 | #pragma pack(push, 4) 45 | 46 | typedef struct ___baseline_proto_header 47 | { 48 | uint8_t prot_code; 49 | _net_auth_key key; 50 | //uint8_t ttl; 51 | //_netaddr_sha160 dt_address_src; 52 | //_netaddr_sha160 dt_address_dst; 53 | uint32_t content_length; 54 | } _bp_header, *__bp_header; 55 | 56 | #pragma pack(pop) 57 | 58 | #define BP_HEADER_SIZE sizeof(struct ___baseline_proto_header) 59 | 60 | #include 61 | 62 | mda pc_a; 63 | 64 | #include 65 | 66 | p_s_cb net_baseline_prochdr; 67 | 68 | void 69 | net_proto_reset_to_baseline (__sock pso); 70 | void 71 | net_proto_na24_copy (_np_netaddr24 *src, _np_netaddr24 *dst); 72 | 73 | int 74 | net_baseline_socket_init0 (__sock pso); 75 | int 76 | net_baseline_socket_t (__sock pso); 77 | int 78 | net_baseline_socket_init1 (__sock pso); 79 | int 80 | net_baseline_socket_destroy_rc0 (__sock pso); 81 | 82 | #endif /* NET_PROTO_H_ */ 83 | 84 | #endif 85 | -------------------------------------------------------------------------------- /src/omfp.h: -------------------------------------------------------------------------------- 1 | /* 2 | * omfp.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef OMFP_H_ 9 | #define OMFP_H_ 10 | 11 | #include 12 | 13 | #include 14 | 15 | #include 16 | 17 | #define omfp_timeout { \ 18 | if (g_omfp_sto) { \ 19 | sleep(g_omfp_sto); \ 20 | } else if (g_omfp_suto) { \ 21 | usleep(g_omfp_suto); \ 22 | } \ 23 | } 24 | 25 | _d_omfp_fp g_omfp_norm, g_omfp_raw, g_omfp_ocomp, g_omfp_eassemble, 26 | g_omfp_eassemblef, g_omfp_eassemble_post, g_omfp_eassemblef_post, 27 | g_xproc_print_d, g_xproc_print; 28 | 29 | int 30 | (*int_printf) (const char *__restrict __format, ...); 31 | 32 | int 33 | g_print_stats (char *file, uint32_t flags, size_t block_sz); 34 | void 35 | g_do_ppprint (__g_handle hdl, uint64_t t_flags, pmda p_mech, _d_omfp g_proc); 36 | 37 | int 38 | g_omfp_write (int fd, char *buffer, size_t max_size, void*); 39 | int 40 | g_omfp_write0 (int fd, char *buffer, size_t max_size, void*); 41 | int 42 | g_omfp_write_nl (int fd, char *buffer, size_t max_size, void*); 43 | int 44 | g_omfp_q_nssys (int fd, char *buffer, size_t max_size, void *arg); 45 | int 46 | g_omfp_q_nssys_nl (int fd, char *buffer, size_t size, void *arg); 47 | 48 | int fd_out; 49 | 50 | #endif /* OMFP_H_ */ 51 | -------------------------------------------------------------------------------- /src/pce/pce_config.h: -------------------------------------------------------------------------------- 1 | /* 2 | * pce_config.h 3 | * 4 | * Created on: Dec 10, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef PCE_CONFIG_H_ 9 | #define PCE_CONFIG_H_ 10 | 11 | /* gl root */ 12 | #ifndef glroot 13 | #ifndef PATH_PREFIX 14 | #define glroot "/" 15 | #else 16 | #define glroot PATH_PREFIX 17 | #endif 18 | #endif 19 | 20 | #ifndef PATH_PREFIX 21 | #define PATH_PREFIX "" 22 | #endif 23 | 24 | #define PCE_F_OPT_SHAREDMEM (a64 << 44) 25 | 26 | #ifndef pce_logfile 27 | #define pce_logfile PATH_PREFIX "/ftp-data/logs/glutil-precheck.log" 28 | #endif 29 | 30 | /* imdb log file path */ 31 | #ifndef imdb_file 32 | #define imdb_file PATH_PREFIX "/ftp-data/glutil/db/imdb.log" 33 | #endif 34 | 35 | /* game log file path */ 36 | #ifndef game_log 37 | #define game_log PATH_PREFIX "/ftp-data/glutil/db/game" 38 | #endif 39 | 40 | /* tv log file path */ 41 | #ifndef tv_log 42 | #define tv_log PATH_PREFIX "/ftp-data/glutil/db/tvrage" 43 | #endif 44 | 45 | #ifndef pce_data_path 46 | #define pce_data_path PATH_PREFIX "/ftp-data/glutil/precheck-data" 47 | #endif 48 | 49 | #ifndef gconf_log 50 | #define gconf_log PATH_PREFIX "/ftp-data/glutil/precheck-data/gconf" 51 | #endif 52 | 53 | #ifndef LOG_LEVEL 54 | #define LOG_LEVEL F_MSG_TYPE_EXCEPTION|F_MSG_TYPE_WARNING|F_MSG_TYPE_ERROR 55 | #endif 56 | 57 | /* site root, relative to gl root */ 58 | #ifndef siteroot 59 | #define siteroot "/site" 60 | #endif 61 | 62 | /* ftp-data, relative to gl root */ 63 | #ifndef ftp_data 64 | #define ftp_data "/ftp-data" 65 | #endif 66 | 67 | /* precheck global config */ 68 | #ifndef gconf_log 69 | #define gconf_log PATH_PREFIX "/ftp-data/glutil/precheck-data/gconf" 70 | #endif 71 | 72 | #define G_HFLAGS PCE_F_OPT_SHAREDMEM|F_OPT_VERBMAX 73 | 74 | #endif /* PCE_CONFIG_H_ */ 75 | -------------------------------------------------------------------------------- /src/pce/pce_misc.c: -------------------------------------------------------------------------------- 1 | /* 2 | * pce_misc.c 3 | * 4 | * Created on: Dec 11, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #include 9 | #include "pce_misc.h" 10 | 11 | #include 12 | #include 13 | 14 | #include 15 | #include 16 | #include 17 | 18 | #include 19 | 20 | #define PCE_PSTR_MAX 16384 21 | 22 | static void 23 | w_log_p (char *w) 24 | { 25 | 26 | /*if (ow && !(get_msg_type(ow) & log_lvl)) 27 | { 28 | return 1; 29 | }*/ 30 | 31 | size_t wc, wll; 32 | 33 | wll = strlen (w); 34 | 35 | if ((wc = fwrite (w, 1, wll, fd_log_pce)) != wll) 36 | { 37 | char e_buffer[1024]; 38 | fprintf (stderr, "ERROR: %s: writing log failed [%d/%d] %s\n", LOGFILE, 39 | (int) wc, (int) wll, g_strerr_r (errno, e_buffer, 1024)); 40 | return; 41 | } 42 | 43 | fflush (fd_log_pce); 44 | 45 | } 46 | 47 | int 48 | pce_log (const char * volatile buf, ...) 49 | { 50 | char d_buffer_2[PCE_PSTR_MAX]; 51 | 52 | if (!(get_msg_type ((char*) buf) & STDLOG_LVL)) 53 | { 54 | return 0; 55 | } 56 | 57 | va_list al; 58 | va_start(al, buf); 59 | 60 | if (NULL != fd_log_pce) 61 | { 62 | struct tm tmd; 63 | 64 | struct tm *tm = get_localtime (&tmd); 65 | 66 | snprintf (d_buffer_2, PCE_PSTR_MAX, 67 | "[%.2u/%.2u/%.2u %.2u:%.2u:%.2u] [%d] %s", tm->tm_mday, 68 | tm->tm_mon + 1, (tm->tm_year + 1900) % 100, tm->tm_hour, 69 | tm->tm_min, tm->tm_sec, getpid (), buf); 70 | 71 | char wl_buffer[PCE_PSTR_MAX]; 72 | vsnprintf (wl_buffer, PCE_PSTR_MAX, d_buffer_2, al); 73 | w_log_p (wl_buffer); 74 | 75 | } 76 | 77 | va_end(al); 78 | 79 | return 0; 80 | } 81 | 82 | -------------------------------------------------------------------------------- /src/pce/pce_misc.h: -------------------------------------------------------------------------------- 1 | /* 2 | * pce_misc.h 3 | * 4 | * Created on: Dec 11, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef PCE_MISC_H_ 9 | #define PCE_MISC_H_ 10 | 11 | int 12 | pce_log (const char * volatile buf, ...); 13 | 14 | #endif /* PCE_MISC_H_ */ 15 | -------------------------------------------------------------------------------- /src/pce/pce_proc.h: -------------------------------------------------------------------------------- 1 | /* 2 | * pce_proc.h 3 | * 4 | * Created on: Dec 7, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef PCE_PROC_H_ 9 | #define PCE_PROC_H_ 10 | 11 | #include 12 | #include 13 | 14 | #define F_PCE_DONE_STR_PREPROC (a32 << 1) 15 | #define F_PCE_FORKED (a32 << 2) 16 | #define F_PCE_HAS_PP_MSG (a32 << 3) 17 | 18 | typedef struct __g_dgetr 19 | { 20 | uint64_t pf; 21 | char *d_field; 22 | char *d_yf; 23 | char *e_lookup_fail; 24 | uint8_t o_lookup_strictness; 25 | } _g_dgetr, *__d_dgetr; 26 | 27 | int 28 | pce_proc (char *path, char *dir); 29 | 30 | char * 31 | pce_decomp (char *subject, char *sct_b, size_t max_sct); 32 | 33 | int 34 | pce_match_build (void *hdl, void *ptr, void *arg); 35 | char * 36 | pce_dgetlf (__d_dgetr dgetr, int logc); 37 | 38 | __g_handle 39 | pce_lhref_fst (pmda lh_ref, uint64_t *pf); 40 | 41 | char * 42 | pce_get_year_result (char *subject, char *output, size_t max_size); 43 | char* 44 | pce_do_str_preproc (char *subject, __d_dgetr dgetr); 45 | 46 | char cl_presub[PATH_MAX]; 47 | char cl_sub[PATH_MAX * 2]; 48 | char cl_yr[32], *s_year; 49 | char *cl_dir; 50 | char *cl_dir_b; 51 | char *cl_g_sub; 52 | char *post_m_exec_str; 53 | 54 | uint32_t pce_f; 55 | int32_t pce_lm; 56 | int EXITVAL; 57 | int 58 | pce_l_execv (char *exec, char **argv, __d_avoid_i ppfe); 59 | int 60 | pce_run_log_match (void *_hdl, void *_ptr, void *arg); 61 | int 62 | pce_match_log (__g_handle hdl, __d_sconf sconf, int m_i_m); 63 | int 64 | pce_do_regex_match (char *pattern, char *match, int cflags, int m_i_m); 65 | int 66 | pce_lh_ref_clean (pmda lh_ref); 67 | int 68 | pce_do_lookup (__g_handle p_log, __d_dgetr dgetr, __d_sconf sconf, char *lp); 69 | void 70 | pce_enable_logging (void); 71 | void 72 | pce_pcl_stat (int r, __d_sconf ptr); 73 | 74 | typedef int 75 | _d_pce_plm (__g_handle hdl, __d_sconf ptr); 76 | 77 | int 78 | pce_process_exec (__g_handle hdl, char *exec_str); 79 | 80 | _d_pce_plm pce_process_string_match, pce_process_lom_match; 81 | 82 | mda g_opt; 83 | 84 | int 85 | pce_print_msg (char *input, __g_handle hdl); 86 | int 87 | pce_g_skip_proc (void); 88 | int 89 | pce_process_exec (__g_handle hdl, char *exec_str); 90 | int 91 | pce_pfe (void); 92 | void 93 | pce_pfe_r (void); 94 | _d_avoid_i pce_prep_for_exec, pce_prep_for_exec_r; 95 | 96 | int 97 | pce_process_execv (__g_handle hdl, char *ptr, __d_avoid_i ppfe); 98 | 99 | char *pp_msg_00[MAX_EXEC_STR + 1]; 100 | 101 | #endif /* PCE_PROC_H_ */ 102 | -------------------------------------------------------------------------------- /src/pce/pce_signal.h: -------------------------------------------------------------------------------- 1 | /* 2 | * pce_signal.h 3 | * 4 | * Created on: Dec 11, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef PCE_SIGNAL_H_ 9 | #define PCE_SIGNAL_H_ 10 | 11 | void 12 | pce_sighdl_error (int sig, siginfo_t* siginfo, void* context); 13 | 14 | #endif /* PCE_SIGNAL_H_ */ 15 | -------------------------------------------------------------------------------- /src/signal.c: -------------------------------------------------------------------------------- 1 | /* 2 | * signal.c 3 | * 4 | * Created on: Dec 6, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #include 9 | #include 10 | #include "config.h" 11 | #include "signal_t.h" 12 | 13 | #include 14 | #include 15 | 16 | #include 17 | #include 18 | #include 19 | #ifdef _G_SSYS_THREAD 20 | #include 21 | #include 22 | #endif 23 | 24 | void 25 | sig_handler_null (int signal) 26 | { 27 | return; 28 | } 29 | 30 | #include 31 | #include 32 | 33 | int 34 | setup_sighandlers (void) 35 | { 36 | struct sigaction sa = 37 | { 38 | { 0 } }, sa_c = 39 | { 40 | { 0 } }, sa_e = 41 | { 42 | { 0 } }; 43 | 44 | int r = 0; 45 | 46 | sa.sa_handler = sig_handler; 47 | sa.sa_flags = SA_RESTART; 48 | 49 | sa_c.sa_sigaction = child_sig_handler; 50 | sa_c.sa_flags = SA_RESTART | SA_SIGINFO; 51 | 52 | sa_e.sa_sigaction = sighdl_error; 53 | sa_e.sa_flags = SA_RESTART | SA_SIGINFO; 54 | 55 | sigfillset (&sa.sa_mask); 56 | sigfillset (&sa_c.sa_mask); 57 | sigemptyset (&sa_e.sa_mask); 58 | 59 | r += sigaction (SIGINT, &sa, NULL); 60 | r += sigaction (SIGQUIT, &sa, NULL); 61 | r += sigaction (SIGABRT, &sa, NULL); 62 | r += sigaction (SIGTERM, &sa, NULL); 63 | //r += sigaction(SIGIO, &sa, NULL); 64 | /*r += sigaction(SIGUSR1, &sa, NULL); 65 | r += sigaction(SIGUSR2, &sa, NULL);*/ 66 | r += sigaction (SIGCHLD, &sa_c, NULL); 67 | r += sigaction (SIGSEGV, &sa_e, NULL); 68 | r += sigaction (SIGILL, &sa_e, NULL); 69 | r += sigaction (SIGFPE, &sa_e, NULL); 70 | r += sigaction (SIGBUS, &sa_e, NULL); 71 | r += sigaction (SIGTRAP, &sa_e, NULL); 72 | r += sigaction (SIGPIPE, &sa, NULL); 73 | 74 | signal (SIGKILL, sig_handler); 75 | 76 | return r; 77 | } 78 | 79 | void 80 | child_sig_handler (int signal, siginfo_t * si, void *p) 81 | { 82 | switch (si->si_code) 83 | { 84 | case CLD_KILLED: 85 | fprintf (stderr, "NOTICE: child process caught SIGINT\n"); 86 | break; 87 | case CLD_EXITED: 88 | break; 89 | default: 90 | if (gfl & F_OPT_VERBOSE3) 91 | { 92 | fprintf (stderr, "NOTICE: child caught signal: %d\n", si->si_code); 93 | } 94 | break; 95 | } 96 | } 97 | 98 | void 99 | sig_handler (int signal) 100 | { 101 | switch (signal) 102 | { 103 | case SIGUSR1: 104 | break; 105 | case SIGUSR2: 106 | break; 107 | case SIGTERM: 108 | fprintf (stderr, "NOTICE: caught SIGTERM, terminating gracefully\n"); 109 | g_send_gkill (); 110 | break; 111 | case SIGINT: 112 | ; 113 | if (gfl & F_OPT_KILL_GLOBAL) 114 | { 115 | fprintf (stderr, "WARNING: forcefully terminating process\n"); 116 | _exit (0); 117 | } 118 | else 119 | { 120 | #ifdef _G_SSYS_NET 121 | fprintf (stderr, "NOTICE: caught SIGINT, signaling global kill..\n"); 122 | #endif 123 | g_send_gkill (); 124 | } 125 | 126 | break; 127 | case SIGPIPE: 128 | if ((gfl & F_OPT_PS_LOGGING) 129 | && -1 != fd_log&& (log_st.st_mode & S_IFMT) == S_IFIFO) 130 | { 131 | fprintf (stderr, 132 | "NOTICE: caught SIGPIPE, releasing log fifo descriptor..\n"); 133 | close (fd_log); 134 | fd_log = -1; 135 | } 136 | break; 137 | default: 138 | //usleep(SIG_BREAK_TIMEOUT_NS); 139 | fprintf (stderr, "NOTICE: caught signal %d\n", signal); 140 | break; 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /src/signal_t.h: -------------------------------------------------------------------------------- 1 | /* 2 | * signal_t.h 3 | * 4 | * Created on: Dec 6, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SIGNAL_T_H_ 9 | #define SIGNAL_T_H_ 10 | 11 | #define SIG_BREAK_TIMEOUT_NS (useconds_t)1000000.0 12 | 13 | #include 14 | 15 | #include 16 | 17 | void 18 | sig_handler_null (int signal); 19 | void 20 | sig_handler_test (int signal); 21 | int 22 | setup_sighandlers (void); 23 | void 24 | child_sig_handler (int signal, siginfo_t * si, void *p); 25 | void 26 | sig_handler (int signal); 27 | 28 | #endif /* SIGNAL_T_H_ */ 29 | -------------------------------------------------------------------------------- /src/sort_hdr.h: -------------------------------------------------------------------------------- 1 | /* 2 | * sort_hdr.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SORT_HDR_H_ 9 | #define SORT_HDR_H_ 10 | 11 | #include 12 | 13 | #include 14 | #include 15 | 16 | #include 17 | 18 | #define F_GSORT_DESC (a32 << 1) 19 | #define F_GSORT_ASC (a32 << 2) 20 | #define F_GSORT_RESETPOS (a32 << 3) 21 | #define F_GSORT_NUMERIC (a32 << 4) 22 | #define F_GSORT_STRING (a32 << 5) 23 | #define F_GSORT_F_DATE (a32 << 6) 24 | 25 | #define F_GSORT_ORDER (F_GSORT_DESC|F_GSORT_ASC) 26 | #define F_GSORT_TYPE (F_GSORT_NUMERIC|F_GSORT_STRING) 27 | #define F_GSORT_TYPE_F (F_GSORT_STRING|F_GSORT_F_DATE) 28 | 29 | #define MAX_SORT_LOOPS MAX_uint64_t 30 | 31 | #define F_INT_GSORT_LOOP_DID_SORT (a32 << 1) 32 | #define F_INT_GSORT_DID_SORT (a32 << 2) 33 | 34 | mda _md_gsort; 35 | char *g_sort_field; 36 | 37 | uint32_t g_sort_flags; 38 | 39 | #include 40 | #include 41 | 42 | typedef struct g_sref_data 43 | { 44 | void *g_t_ptr_c; 45 | gs_cmp_p m_op, m_op_opp; 46 | uint32_t flags; 47 | size_t off; 48 | char m_buf1[4096], m_buf2[4096]; 49 | _d_drt_h mppd; 50 | int64_t off_right; 51 | void *sp_0; 52 | } _srd, *__p_srd; 53 | 54 | typedef int 55 | (*g_xsort_exec_p) (pmda m_ptr, __p_srd psrd); 56 | 57 | int 58 | do_sort (__g_handle hdl, char *field, uint32_t flags); 59 | int 60 | opt_g_sort (void *arg, int m, void *opt); 61 | void 62 | g_invert_sort_order (uint32_t *flags); 63 | int 64 | g_sort (__g_handle hdl, char *field, uint32_t flags); 65 | int 66 | g_check_is_data_numeric (__g_handle hdl, char *field); 67 | void 68 | g_heapsort (void **ref_arr, int64_t offset, int64_t dummy, __p_srd psrd); 69 | void 70 | g_qsort (void **arr, int64_t left, int64_t right, __p_srd psrd); 71 | int 72 | preproc_sort_numeric (__g_handle hdl, char *field, uint32_t flags, __p_srd psrd); 73 | int 74 | g_sort_string (__g_handle hdl, char *field, uint32_t flags, __p_srd psrd); 75 | 76 | typedef void 77 | (*__d_sort_p) (void **arr, int64_t left, int64_t right, __p_srd psrd); 78 | 79 | #endif /* SORT_HDR_H_ */ 80 | -------------------------------------------------------------------------------- /src/str.h: -------------------------------------------------------------------------------- 1 | /* 2 | * str.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef STR_H_ 9 | #define STR_H_ 10 | 11 | #define REG_MATCHES_MAX 4 12 | 13 | #define REG_PATTERN_BUFFER_MAX 131072 14 | 15 | #include 16 | 17 | #include 18 | 19 | _d_achar_p g_basename, g_dirname; 20 | 21 | _d_is_am is_ascii_text, is_ascii_lowercase_text, is_ascii_alphanumeric, 22 | is_ascii_hexadecimal, is_ascii_uppercase_text, is_ascii_numhex, 23 | is_ascii_numeric, is_ascii_numeric_float; 24 | 25 | int 26 | is_ascii_numhex_n (char *in_c); 27 | int 28 | remove_repeating_chars (char *string, char c); 29 | char * 30 | strcp_s (char *dest, size_t max_size, char *source); 31 | 32 | char * 33 | s_char (char *input, char c, size_t max); 34 | off_t 35 | s_string (char *input, char *m, off_t offset, size_t i_l); 36 | off_t 37 | s_string_r (char *input, char *m); 38 | size_t 39 | g_floatstrlen (char *in); 40 | 41 | int 42 | split_string (char *line, char dl, pmda output_t); 43 | int 44 | split_string_l (char *line, char dl, pmda output_t, size_t max_out); 45 | int 46 | split_string_l_le (char *line, char dl, pmda output_t, size_t max_out); 47 | int 48 | split_string_sp_tab (char *line, pmda output_t); 49 | int 50 | is_char_uppercase (char); 51 | int 52 | get_opr (char *in); 53 | int 54 | is_opr (char in); 55 | int 56 | is_comp (char in); 57 | char * 58 | generate_chars (size_t, char, char*); 59 | char * 60 | replace_char (char w, char r, char *string); 61 | char * 62 | string_replace (char *input, char *match, char *with, char *output, 63 | size_t max_out); 64 | size_t 65 | str_match (char *input, char *match); 66 | 67 | int 68 | reg_match (char *expression, char *match, int flags); 69 | char * 70 | reg_sub_d (char *rs_p, char *pattern, int cflags, char *output); 71 | char * 72 | reg_getsubm (char *rs_p, char *pattern, int cflags, char *output, 73 | size_t max_out); 74 | char * 75 | reg_sub_g (char *subject, char *pattern, int cflags, char *output, 76 | size_t max_size, char *rep); 77 | char * 78 | g_zerom_r (char *input, char m); 79 | char * 80 | g_zerom (char *input, char m); 81 | char* 82 | g_resolve_esc (char *input, char *output, size_t max_size); 83 | char * 84 | g_p_escape_once (char *input, char *match); 85 | void 86 | g_del_char (char *input, char *output, char match); 87 | char * 88 | bb_to_ascii (unsigned char *block, size_t len, char *out); 89 | char * 90 | g_dirname_p (char *input); 91 | 92 | #endif /* STR_H_ */ 93 | -------------------------------------------------------------------------------- /src/taskd.h: -------------------------------------------------------------------------------- 1 | /* 2 | * taskd.h 3 | * 4 | * Created on: Oct 25, 2015 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef SRC_TASKD_H_ 9 | #define SRC_TASKD_H_ 10 | 11 | #define MAX_TASKS_GLOBAL 40000 12 | 13 | #include "memory_t.h" 14 | 15 | #include 16 | #include 17 | 18 | typedef struct ___task 19 | { 20 | int 21 | (*task_proc) (struct ___task *task); 22 | void *data; 23 | uint16_t flags; 24 | } _task, *__task; 25 | 26 | typedef int 27 | (*_task_proc) (struct ___task *task); 28 | 29 | mda tasks_in; 30 | pthread_t task_worker_pt; 31 | 32 | int 33 | register_task (_task_proc proc, void *data, uint16_t flags); 34 | void * 35 | task_worker (void *args); 36 | 37 | #endif /* SRC_TASKD_H_ */ 38 | -------------------------------------------------------------------------------- /src/thread.h: -------------------------------------------------------------------------------- 1 | /* 2 | * thread.h 3 | * 4 | * Created on: Sep 14, 2012 5 | * Author: reboot 6 | */ 7 | 8 | #ifdef _G_SSYS_THREAD 9 | 10 | #ifndef THREAD_H_ 11 | #define THREAD_H_ 1 12 | 13 | #include 14 | #include 15 | 16 | #include 17 | 18 | #include 19 | 20 | #define F_THRD_TERM ((uint32_t)1 << 1) 21 | #define F_THRD_NOWPID ((uint32_t)1 << 2) 22 | #define F_THRD_NOREG ((uint32_t)1 << 3) 23 | #define F_THRD_DETACH ((uint32_t)1 << 4) 24 | #define F_THRD_NOINIT ((uint32_t)1 << 5) 25 | #define F_THRD_REGINIT ((uint32_t)1 << 6) 26 | #define F_THRD_CINIT ((uint32_t)1 << 7) 27 | #define F_THRD_MISC00 ((uint32_t)1 << 10) 28 | 29 | #define THREAD_MAX 50 30 | #define MAX_OBJ_GEN_WORKER_ARG 256 31 | 32 | #define THREAD_DEFAULT_BUFFER0_SIZE 8192 33 | 34 | #define F_THRD_STATUS_SUSPENDED ((uint32_t)1 << 1) 35 | #define F_THRD_STATUS_INITIALIZED ((uint32_t)1 << 2) 36 | 37 | typedef struct gen_worker_arg 38 | { 39 | int count; 40 | } gwa, *p_gwa; 41 | 42 | typedef struct object_gen_worker 43 | { 44 | void *call; 45 | int a_count; 46 | void *arg; 47 | } o_gw, *p_ogw; 48 | 49 | #define F_TTIME_ACT_T0 ((uint8_t)1 << 1) 50 | #define F_TTIME_ACT_T1 ((uint8_t)1 << 2) 51 | 52 | typedef struct __thread_timers 53 | { 54 | char act_f; 55 | time_t t0, t1, t2; 56 | } _thread_tm; 57 | 58 | typedef struct object_thrd 59 | { 60 | pthread_t pt, caller; 61 | int id; 62 | int sig; 63 | uint32_t flags, status; 64 | mda in_objects, proc_objects; 65 | pmda pin_objects; 66 | uint16_t role, oper_mode; 67 | void *buffer0; 68 | size_t buffer0_size; 69 | _thread_tm timers; 70 | pmda host_ctx; 71 | pthread_mutex_t mutex; 72 | } o_thrd, *po_thrd; 73 | 74 | #define F_THC_SKIP_IO (uint32_t ) 1 << 1 75 | #define F_THC_USER_DATA (uint32_t ) 1 << 2 76 | 77 | int 78 | thread_create (void *call, int id, pmda _thrd_r, uint16_t role, 79 | uint16_t oper_mode, uint32_t flags, uint32_t i_flags, 80 | po_thrd data, po_thrd *ret, pthread_t *pt_ret); 81 | int 82 | mutex_init (pthread_mutex_t *mutex, int flags, int robust); 83 | 84 | int 85 | thread_destroy (p_md_obj ptr); 86 | 87 | mda _net_thrd_r; 88 | mda _thrd_r_common; 89 | 90 | p_md_obj 91 | search_thrd_id (pmda thread_r, pthread_t *pt); 92 | int 93 | thread_broadcast_kill (pmda thread_r); 94 | void 95 | thread_send_kill (po_thrd pthread); 96 | int 97 | thread_join_threads (pmda thread_r); 98 | int 99 | thread_broadcast_sig (pmda thread_r, int sig); 100 | 101 | int 102 | spawn_threads (int num, void *call, int id, pmda thread_register, uint16_t role, 103 | uint16_t oper_mode, uint32_t flags); 104 | 105 | void 106 | mutex_lock (pthread_mutex_t *mutex); 107 | int 108 | mutex_trylock (pthread_mutex_t *mutex); 109 | 110 | typedef float 111 | dt_score_pt (pmda in, pmda out, void *arg1, void *arg2); 112 | typedef float 113 | (*dt_score_ptp) (pmda in, pmda out, void *arg1, void *arg2); 114 | void 115 | ts_flag_32 (pthread_mutex_t *mutex, uint32_t flags, uint32_t *target); 116 | void 117 | ts_unflag_32 (pthread_mutex_t *mutex, uint32_t flags, uint32_t *target); 118 | 119 | int 120 | push_object_to_thread (void *object, pmda threadr, dt_score_ptp scalc, 121 | pthread_t *st); 122 | 123 | #endif /* THREAD_H_ */ 124 | 125 | #endif 126 | -------------------------------------------------------------------------------- /src/time.c: -------------------------------------------------------------------------------- 1 | /* 2 | * time.c 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #include "timeh.h" 9 | 10 | #include 11 | 12 | struct tm * 13 | get_localtime (struct tm * result) 14 | { 15 | time_t t = time (NULL); 16 | 17 | return localtime_r (&t, result); 18 | } 19 | -------------------------------------------------------------------------------- /src/timeh.h: -------------------------------------------------------------------------------- 1 | /* 2 | * timeh.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef HTIME_H_ 9 | #define HTIME_H_ 10 | 11 | #include 12 | 13 | struct tm * 14 | get_localtime (struct tm *result); 15 | 16 | #endif /* HTIME_H_ */ 17 | -------------------------------------------------------------------------------- /src/x_f.h: -------------------------------------------------------------------------------- 1 | /* 2 | * x_f.h 3 | * 4 | * Created on: Dec 4, 2013 5 | * Author: reboot 6 | */ 7 | 8 | #ifndef X_F_H_ 9 | #define X_F_H_ 10 | 11 | #include 12 | #include 13 | 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | 21 | #ifndef IFTODT 22 | #define IFTODT(mode) (((mode) & 0170000) >> 12) 23 | #endif 24 | 25 | #ifdef HAVE_ST_BIRTHTIME 26 | #define birthtime(x) x->st_birthtime 27 | #else 28 | #define birthtime(x) x->st_ctime 29 | #endif 30 | 31 | #define F_FC_MSET_SRC (a32 << 1) 32 | #define F_FC_MSET_DEST (a32 << 2) 33 | 34 | #define UPDC32(octet,crc) (crc_32_tab[((crc) ^ ((uint8_t)octet)) & 0xff] ^ ((crc) >> 8)) 35 | 36 | typedef struct gu_nfo 37 | { 38 | uint32_t id; 39 | char name[64]; 40 | } gu_n, *p_gu_n; 41 | 42 | #define PGF_MAX_LINE_SIZE 8192 43 | #define PGF_MAX_LINE_PROC 134217728 44 | 45 | off_t 46 | get_file_size (char *file); 47 | time_t 48 | get_file_creation_time (struct stat *); 49 | off_t 50 | file_crc32 (char *file, uint32_t *crc_out); 51 | 52 | _d_achar_i self_get_path, file_exists, get_file_type, dir_exists, check_path; 53 | 54 | int 55 | find_absolute_path (char *exec, char *output); 56 | 57 | #include 58 | 59 | int 60 | delete_file (char *name, unsigned char type, void *arg, __g_eds eds); 61 | ssize_t 62 | file_copy (char *source, char *dest, char *mode, uint32_t flags); 63 | off_t 64 | read_file (char *file, void *buffer, size_t read_max, off_t offset, FILE *_fp); 65 | int 66 | write_file_text (char *data, char *file); 67 | size_t 68 | exec_and_redirect_output (char *command, FILE *output); 69 | off_t 70 | enum_readline (char *file, void *buffer, size_t read_max, off_t max_l, 71 | FILE *_fp, int 72 | (*call_b) (char *b, void *a), 73 | void *arg); 74 | 75 | typedef int 76 | _pf_eof (void *p); 77 | 78 | _pf_eof gz_feof, g_feof; 79 | 80 | int 81 | load_guid_info (pmda md, char *path); 82 | p_gu_n 83 | search_xuid_id (pmda md, uint32_t id); 84 | p_gu_n 85 | search_xuid_name (pmda md, char *name); 86 | 87 | #ifdef HAVE_ZLIB_H 88 | int 89 | g_is_file_compressed(char *file); 90 | #endif 91 | 92 | int 93 | r_preload_guid_data (pmda md, char *path); 94 | 95 | #endif /* X_F_H_ */ 96 | --------------------------------------------------------------------------------