diff --git a/Rocksolid_Light/rocksolid/newsportal.php b/Rocksolid_Light/rocksolid/newsportal.php
index 1c987db..e0b6e3e 100644
--- a/Rocksolid_Light/rocksolid/newsportal.php
+++ b/Rocksolid_Light/rocksolid/newsportal.php
@@ -1768,18 +1768,47 @@ function get_poster_name($name)
return ($thisposter);
}
-function save_config_value($configfile, $name, $value)
+/*
+ * This function returns false on success
+ * or return value contains error info
+ * 'added' etc.
+ */
+function save_config_value($configfile, $name, $value, $value_unique = false)
{
- $list = file($configfile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
- $saveconfig = fopen($configfile, 'w+');
- foreach ($list as $save) {
- $name = explode(':', $save);
- if (strcmp($name[0], $group) == 0) {
- fputs($saveconfig, $group . ":" . $article . "\n");
+ global $spooldir;
+ $return_val = false;
+ $tempfile = tempnam($spooldir, 'rslight-');
+ if(file_exists($tempfile)) {
+ unlink($tempfile);
+ }
+ $lines = file($configfile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
+ $found = false;
+ foreach ($lines as $line) {
+ $current = explode(':', $line);
+ if ($value_unique && (strcmp($current[1], $value) == 0)) {
+ // Found value. Write once
+ if(!$found) {
+ file_put_contents($tempfile, $name . ":" . $value . "\n", FILE_APPEND);
+ }
+ $found = true;
+ continue;
+ }
+ if (strcmp($current[0], $name) == 0) {
+ // $name matches option. Overwrite
+ file_put_contents($tempfile, $name . ":" . $value . "\n", FILE_APPEND);
+ $found = true;
} else {
- fputs($saveconfig, $save . "\n");
+ // $name does not match option. Keep current line
+ file_put_contents($tempfile, $line . "\n", FILE_APPEND);
}
}
+ if(!$found) {
+ // $name not found in options. Add to file.
+ file_put_contents($tempfile, $name . ":" . $value . "\n", FILE_APPEND);
+ }
+ copy($tempfile, $configfile);
+ unlink($tempfile);
+ return $return_val;
}
function get_config_file_value($configfile, $request)
diff --git a/Rocksolid_Light/rslight/overrides.inc.php.dist b/Rocksolid_Light/rslight/overrides.inc.php.dist
index a23bf12..6844fd6 100644
--- a/Rocksolid_Light/rslight/overrides.inc.php.dist
+++ b/Rocksolid_Light/rslight/overrides.inc.php.dist
@@ -25,6 +25,12 @@ return [
// Disable Message-ID search in header
'disable_msgid_search' => false,
+ // Reserved aliases
+ 'reserved_names' => array("admin", "sysop", "rslight"),
+
+ // Users who may have duplicate aliases in aliases.conf
+ 'duplicate_aliases' => array("admins user name here"),
+
// Just leave this here to avoid comma errors
'comma' => true
];
diff --git a/Rocksolid_Light/spoolnews/user.php b/Rocksolid_Light/spoolnews/user.php
index cf952ff..e9d22c7 100644
--- a/Rocksolid_Light/spoolnews/user.php
+++ b/Rocksolid_Light/spoolnews/user.php
@@ -221,6 +221,27 @@ if (isset($_POST['command']) && $_POST['command'] == 'SaveConfig') {
$value = false;
}
}
+ if(isset($OVERRIDES['reserved_names'])) {
+ $reserved_names = $OVERRIDES['reserved_names'];
+ } else {
+ $reserved_names = array("admin", "sysop");
+ }
+ if(isset($OVERRIDES['duplicate_aliases'])) {
+ $dupe_ok = $OVERRIDES['duplicate_aliases'];
+ } else {
+ $dupe_ok = false;
+ }
+ foreach($reserved_names as $name) {
+ if(strtolower($_POST['display_name']) == strtolower($name)) {
+ // It's a reserved alias
+ echo '' . $_POST['display_name'] . " is unavailable.
Please try again";
+ echo '