Version 0.9-1
-------------
(mab) Add PROC back to GPL.BP. Users have requested it and CPROC will abort if it finds a
paragraph of type "PQ"
Add TAPE and ACCOUNT.RESTORE subsystem as optionally installed software.
Rework revision methodology. Original release introduced two revision tracks,
one for the VM another for the SD mods to commands, ideas on user / accounts etc.
The thought was that very few changes would be made to the VM and we would maintain
compatibility with QM/ScarletDME at revision 2.6-6. With some of the recent changes
(addition of Sodium, Embedded Python and more importantly the dynamic file prefix
change from ~ to %), SD is no longer completely compatible with 2.6-6 version systems.
Roll back to single revision track and start at rev 0.9-1.
*** As a result you MUST shutdown and restart the OS on delete and install of SD ***
If you have user / group accounts saved from previous installs, a prompt for upgrading
the accounts will occur at login.
Correct handling of embedded newlines in MESSAGES, Display of SYSMSG(msg_nbr) should
now include the necessary new line and return characters.
Correct the "HELP" command in ED(itor), now displays all of HELP if no additional
command text given.
Remove call to kernel(K$HELP,'') not avail on SD.
Version 0.9.0
-------------
(d-chou) Change to sdsem.c - LockSemaphore() add IPC_NOWAIT and RelinquishTimeslice
Semaphores can be used to create exclusive locks, preventing multiple processes
from accessing a shared resource at the same time. However, if the IPC_NOWAIT
constant is not specified, a process trying to acquire the lock will block and
wait if the semaphore is already held by another process.This can lead to unintended
synchronization between processes. To avoid this, IPC_NOWAIT should be specified
which will cause the process to return immediately with an error if the lock cannot
be acquired.
(mab) Convert sd dynamic file blobs prefix from '~' to '%'
Turn function "process_file" back on in sdfix. For some reason it was commented out
(sdfix did nothing).
Fix directory file name mapping of '~' and '%t'
The BASIC command SSELECT is processed by pcode routine _SSELCT, when it attempts to
sort the NULL id, the wheels come off (seg fault).
Correct op_sort.c / op_sortdata() to test for a NULL id before processing (prevent
segfault on strlen() function.
Add SYS$ keys in KEYS.H (see op_sys.c) for BASIC function system() (preparation for
qmExplorer)
Add subroutines EUID_SET and EUID_RESTORE to set and restore the euid and egid of
the process running sd. If a process is started with sudo sd, the process will be
dropped to runing as sdsys and only run as root (euid = 0)when necessary. This
switch is all performed in CPROC with the dynamic array privileged_commands defining
the commands that require root privileges.
Special note: At install time we cannot reduce running privialges to sdsys, none of
the groups are effective casuing all sorts of access issues. To get around this
CPROC must be complied with IS_INSTALL defined. This define statement is found
in the GPL.BP file "define_install.h". The install script overwrites this file with
IS_INSTALL commented out, and CPROC will be recomplied.
Modify how group accounts are setup / handled (CREATE.ACCOUNT). Group accounts now
have their parent directory ownership starting as sdsys : group. To access a group
account, a user must belong to the linux group of the same name (LOGIN / LOGTO)
CREATE.ACCOUNT will create the linux group (if it does not exist) and add "sdsys"
and "root" to members.
CREATE.ACCOUNT sets the setgid bit on the account's parent directory. This allows
the directories / files to be modified by all the users who are part of the group of
the parent directory.
CREATE,ACCOUNT saves group name in fld 3 of ACCOUNTS record (for both CREATE.ACCOUNT
USER and GROUP)
LOGIN and LOGTO(CPROC) now checks to confirm user is a member of sdusers group and
ACCOUNT group modification to function is_grp_member(user,group) to return true if
group found or if group = user
Add command MODIFY.ACCOUNT to add users as members to the SD account.
Add command WHO.AM.I to display information on the current user and process.
Tighten up sdsys file permissions (only allow group to have write access on
necessary directories / files).
Install script sets /usr/local/sdsys owner : group sdsys : sduser with
permissions 755 except:
775 /usr/local/sdsys/errlog
654 /usr/local/sdsys/ACCOUNTS/SDSYS
Remove the ability to set "PICK" compatibility options via the OPTION program:
PICK.BREAKPOINT : Off Pick syntax for BREAK.ON and BREAK.SUP
PICK.BREAKPOINT.U : Off Handle U breakpoint option in Pick manner
PICK.EXPLODE : Off Pick style processing of single value item in BY.EXP
PICK.GRAND.TOTAL : Off GRAND.TOTAL text on same line as values
PICK.IMPLIED.EQ : Off Implied EQ between field and literal in query
PICK.NULL : Off Return null for null data in ML, MR and FMT()
PICK.WILDCARD : Off Allow use of Pick style wildcards in queries
QUALIFIED.DISPLAY : Off Allow Pick style qualified display clauses
Note: at this time the source still contains the code to implement these options,
but the intent is to not continue supporting "PICK" compatibility.
Modify the GPL.BP/CATALOG program to:
require admin priviliges for global catalog
set owner : group to sdsys : sdusers on write to gcat
Install script:
- If make fails, exit script
- If modify script to use whatever version of python is installed.
- add root to sdsys group.
- update install ACCOUNTS/SDSYS record to include group name sdsys
Delete Script:
- Remove group sdsys on sd delete
MakeFile:
- Builds embedded python
- Move "Embedded Python" code from examples to gplsrc and GPL.BP
- BCOMP - allow @FILE.NAME on left side of assignment.
- VOC / NEWVOC add SD.ACCOUNTS q pointer to SDSYS/ACCOUNTS
(dsm) The Fedora install script was removed because of lack of a long term support
version of Fedora. Time required to test installer every six months is too
much for small development team.
Replace LibreOffice documents with PDFs as github complains that the LibreOffice
documents are binary files.
Version 0.8.2
-------------
(dsm) This minor point release includes some changes to the system C and Basic code to
better support the SD default terminal size of 120x36. Also some changes were
made to the install and uninstall scripts.
Version 0.8.1
-------------
(mab) Correct c function op_dtx / BASIC function DTX(), using wrong format code.
(mab) Add GPL.BP subs !SD_GET_SALT and !SD_KEY_FROM_PW. Routines use SDEXT to create SALT
and Key from Password (Phrase) via Libsodium.
See SD Encryption chapter in the SD Documentation file.
(mab) Add embedded python build to examples folder (../examples/python/embedded_python).
See SD Embedded Python in the SD Documentation file.
Version 0.7.1
-------------
(mab) Add BASIC Functions / Statements:
SDENCRYPT / SDDECRYPT
SDEXT – Generic function for extending SD / BASIC to interface with C Functions.
Remove unsupported BASIC Functions / Statements:
ABORTE, ABORTM
CONNECT.PORT, ERRMSG, TTYGET, TTYSET, STOPE, STOPM
ENCRYPT, DECRYPT - replace with SDENCRYTP, SDDECRYPT
ENTER.PACKAGE, EXIT.PACKAGE, PACKAGE, PROCREAD, PROCWRITE,
TRACE, PICK.ERRMSG compiler mode
Remove associated references from gplsrc/opcodes.h
Remove code from gplsrc as necessary
Introduce max string error checking in SD.
History: The original QM code that SD is based on was (is?) a 32 bit virtual
machine. As such strings are limited in size to just under 2 GB. The issue is
there is no size checking and a user could attempt to create or load a string at or
above this limit, causing SD to crash (segfault).
Changes to date:
sdclilib client will not allow user to write a record > MAX_STRING_SIZE
Directory read of a file (record) > MAX_STRING_SIZE not allowed.
Functions: append (':='), CHANGE(), concatenate (':'), INSERT(), REPLACE(),
STR() will not allow a string > MAX_STRING_SIZE to be created.
(dsm) Removed compiled code in fld 16 of I type dictionary items that are copied from
FILES_DICTS. Create a Record in VOC, THIRD.COMPILE that recompiles them after they
are copied. Updated install scripts to call THIRD.COMPILE.
Added SED and UPDATE.RECORD back after modifying them to not call tty routines as
the tty functionality has been removed.
Documentation:
Added a LibreOffice spreadsheet showing the VOC items that have
been retained and removed compared to ScarletDME
Added a LibreOffice document regarding installation.
Removed Depreciated folder and contents
Started modifying @ dictionary records and related dictionary items so that
default LIST reports are formatted for 120x36 terminal size.
(dsm) Change max string size to 1 GB
Version 0.7.0
-------------
(mab) Created a BASIC compiler (written in Python) for SD, we now have a version of SD
that has no binary elements required for installation. Everything is source and
auditable.
During installation the Python basic compiler compiles the necessary source code in
GPL.BP that in the past prevented the system from being binary element free.
Also, any required dynamic dictionaries are created during installation.
Version 0.6.4
-------------
(mab) sd command as privileged user (sudo sd) will start out in account SDSYS
Only allow non privileged user to LOGIN or LOGTO:
Their own account.
Group account which they have access to.
A list of allowed users is found in ACCOUNTS record, field <ACC$USERS>
CREATE-ACCOUNT USER adds user to their own account list.
Use the MODIFY command ie) "MODIFY ACCOUNTS <account name>" to edit user list
Change install script template of ACCOUNTS / SDSYS file to ownership from
-rwxrwxr-x 1 sdsys sdusers To -rw-rw-r-- 1 root root
(LIST-USERS now reports for user: Last Login Account, Time and Date
(dsm) Removed MED from GPL.BP, GPL.BP.OUT, gcat, NEWVOC & VOC
Moved GPL.BP/MED source code to Depreciated
Removed SED from GPL.BP, GPL.BP.OUT, gcat, NEWVOC & VOC
Moved GPL.BP/SED source code to Depreciated
Removed SCRB from GPL.BP, GPL.BP.OUT, gcat, NEWVOC & VOC
Moved GPL.BP/SCRB source code to Depreciated
Removed SCREEN$STOP.SCR from GPL.BP
Removed SCREEN from GPL.BP and BPL.BP.OUT
Moved GPL.BP/SCREEN source code to Depreciated
Removed ADMUSER/ADMIN.USER from GPL.BP, GPL.BP.OUT, gcat, NEWVOC & VOC
Moved GPL.BP/ADMUSER source code to Depreciated
Removed GPL.BP/$ADMUSER.SCR
Removed files $FORMS, $SCREENS, $SCREENS.DIC, ERRMSG, ERRMSG.DIC
Remove ERRMSG in VOC and NEWVOC
Remove SP.ASSIGN & SET.QUEUE progrrams from GPL.BP, GPL.BP.OUT, gcat, NEWVOC and VOC
Move GPL.BP/SP.ASSIGN and SET.QUEUE to Depreceiated
Delete all records in MESSAGES starting with PL (Polish)
Removed system verbs ADMSRVR CREATE-USER, DELETE-USER, LIST-USERS, RECOVER-USERS and
related files if VOC, NEWVOC, GPL.BP, GPL.BP.OUT and gcat
Version 0.6.3
-------------
(mab) mods date tagged in source as 20240219 and 20240225 mab
Remove the ability to run the system in "insecure mode".
Remove SECURITY program from GPL.BP and $secure from gcat
Do not allow kernel(K$SECURE, >=0) to reset security flag.
VM - Add CHOWN function to OSPATH.
Example: CALL ospath(chown_parm,OS$CHOWN)
where chown_parm is a VM separated string <owner_name> VM <group_name> VM
<file_path>
Note in version 2.6.6 OSPATH is an internal function (requires -internal at login
to compile). Also for most OS$CHOWN operations to work, user will need to be root.
GPL.BP/LOGIN
No longer allow NETWORK or SERIAL connections.
Always run in secure mode.
Do not auto create missing user account.
System admin will need to add user to sdusers group and create user default
account ("create-account USER <username>" , see below) prior user login.
Change login behavior to:
on command:
sd -a<account> - if account exists, login otherwise terminate connection.
sd - if /home/sd/user_accounts/<username> exists, log to user account
else display "Account <user> not in register" and terminate connection
User must be member of sdusers group, if not terminate connection.
Note - This changes the current behavior of logging into the account found at
the current directory.
Remove option to create account.
Mod CREATE-ACCOUNT
Rem was
CREATE.ACCOUNT acc.name pathname {NO.QUERY}
Now
CREATE.ACCOUNT USER <username> {NO.QUERY} - account created in
/home/sd/user_accounts/<username>,
owner:group set to <username>:<username>
<username> must be found in sdusers group!
CREATE.ACCOUNT GROUP acc.name {NO.QUERY} - account created in
/home/sd/group_accounts/<acc.name>, owner:group set to root:sdusers
CREATE.ACCOUNT OTHER acc.name pathname {NO.QUERY} - account created in pathname,
owner:group set to root:sdusers
User must be privileged (root) to use CREATE-ACCOUNT verb.
DELETE-ACCOUNT User must be privileged (root) to use DELETE-ACCOUNT verb.
Add to install script:
Create directories /home/sd/user_accounts and /home/sd/group_accounts
Add command to create user account in /home/sd/user_accounts/<$tuser>
Implementing AF_UNIX sockets (and removing AF_INET). All remote connections will
only be allowed via a tunnel (ssh tunnel).
API changes:
Rebrand the GPL.BP/VBSRVR to APISRVR and associated notation.
SDConnectlocal(Account) - No Change. This connection method only works on the
local system. It creates a forked process of sd and communicates via pipes,
no network involved.
SDConnectUDS(Account) - New connection method mostly for testing. This is still
a local system connection only, but connects via the Unix Domain Socket
/tmp/sdsys/sdclient.socket. Connection method connects as initiating local
(the peer).
SDConnect(Host,Port,UserName,Password,Account) - Connect from remote via ssh
tunnel.
If configuration file has APILOGIN=1 or not found: User and Password are
validated, API server process runs with usr_id and grp_id as UserName
(remember all server connections start out as root).
If APILOGIN=0: UserName and Password are NOT validated, API server process runs
with usr_id and grp_id as the User creating the ssh tunnel (peer.
User still must be a valid linux user.
Regardless of connection method, User MUST be member of sdusers group!
Update MESSAGES file, change references from SCARLETDME to String Database (sd)
Remove hold over users in $LOGINS
NOTE!! In order for this rev to build, libbsd-dev must be installed (sudo apt-get
install libbsd-dev) - Added to install script
Create separate revision numbers for both the Virtual Machine and SD (defined in
gplsrc/revstamp.h). Add to SYSLOG sd command line.
(dsm) Created Depreciated directory for features that have been removed or modified from
original function.
GPL.BP.zip contains code fore removed features.
SD.VOCLIB.zip contains LISTxx code for 80x24 screen size.
Version 0.6.2 1/21/2024
-----------------------
(mab) Corrected issues with C code that were generating errors during make
Replaced hard coded hex valuss in GPL.BP with @VM and other hex alternatives
Fixed possible endless loop in DELETE-FILE
(dsm) Updated GPL.BP CONFIG to use 'less' to display the licence file
Updated all sentences in SD.VOCLIB for larger terminal display
Added a globally cataloged shell for the micro console based editor
Version 0.6.1 1/19/2024
-----------------------
- Removed COPYP and PROC functionality
- Removed reference to the openqm website which no longer exists
in all code.
- Removed history entries from parent databases
- Changed the install scripts to
- wait until after installation to /usr/local/sdsys to recompile c code
- avoid starting SD during installation or compile Basic code
- Modified SD.VOCLIB to be a directory file
- Set up a pcloud directory to hold zip file of each release
Prior to 1/19/2024
------------------
SD, the String Database is based on code originally released under the
GPL license in 2007 as a GPL release of the OpenQM database. Later
on, that code was forked and modified. The result became the ScarletDME
database. It was a 32 bit only database until 2022 when the first
iteration of the 64 bit version was released.
SD is based on the 64 bit code in the geneb/ScarletDME github repository
as of the end of 2023.
2024-01-15 In creating SD the following changes have been made:
Some features have been removed. These include :
1 the Big Letter capability for large print titles on printed reports
and terminal displays.
2 The package capability that allowed for installation of third party
packages in the original commercial product.
3 TAPE related packages that included the account and file save and
restore features.
4 PROC capability
5 COPYP functionality (COPY using Pick syntax).
The SD_SHM_KEY and SD_SEM_KEY offsets have been changed so that SD
can be run in parallel with commercial and open source databases that
use the same underlying architecture.
The sockets used for the API and telnet access have been changed:
The telnet socket from 4242 to 4244
The API socket from 4243 to 4245
The original database was called OpenQM and is still available as a
commercial product from Rocket Software. For SD, the original QM
branding has been entirely removed. Even internal variables and program
and file names have been changed to reflect the SD branding.
Some references to ScarletDME and Ladybridge Software have been
removed. Copyright statements have been retained.
The default location of the database has been changed to
/usr/local/sdsys.
The default terminal type is Linux and the default terminal size is 120x36.
The C and Basic object code is included in the download. To install without
recompiling everything, comment out the Make -B command and the two
lines containing FIRST.COMPILE and SECOND.COMPILE respectively.
This database is in development. So far everything I have tested seems to
work as expected. However, I'm sure there are things that need to
be found and corrected. Other testers are appreciated.