Merge remote-tracking branch

'origin/GP-5129_ghidracadabra_PR-7102_gemesa_bsim-ctl-status'
(Closes #7102)
This commit is contained in:
Ryan Kurtz 2024-12-06 07:43:46 -05:00
commit 5aec99616a
2 changed files with 42 additions and 0 deletions

View file

@ -41,6 +41,7 @@
<CODE class="computeroutput">
bsim_ctl start &lt;/datadir-path&gt; [--auth|-a&nbsp;pki|password|trust] [--noLocalAuth] [--cafile&nbsp;&lt;/cacert-path&gt;] [--dn&nbsp;"&lt;distinguished-name&gt;"]
bsim_ctl stop &lt;/datadir-path&gt; [--force]
bsim_ctl status &lt;/datadir-path&gt;
bsim_ctl adduser &lt;/datadir-path&gt; &lt;username&gt; [--dn&nbsp;"&lt;distinguished-name&gt;"]
bsim_ctl dropuser &lt;/datadir-path&gt; &lt;username&gt;
bsim_ctl resetpassword &lt;username&gt;
@ -136,6 +137,13 @@
immediately.</P>
</DD>
<DT><SPAN class="term"><SPAN class="bold"><STRONG>status</STRONG></SPAN></SPAN></DT>
<DD>
<P>Retrieves the status of a PostgreSQL server (running/down). The path to the
actively used data directory must be provided.</P>
</DD>
<DT><SPAN class="term"><SPAN class="bold"><STRONG>adduser</STRONG></SPAN></SPAN></DT>
<DD>

View file

@ -52,6 +52,7 @@ public class BSimControlLaunchable implements GhidraLaunchable {
// bsim_ctl commands
public final static String COMMAND_START = "start";
public final static String COMMAND_STOP = "stop";
public final static String COMMAND_STATUS = "status";
public final static String COMMAND_RESET_PASSWORD = "resetpassword";
public final static String COMMAND_CHANGE_PRIVILEGE = "changeprivilege";
public final static String COMMAND_ADDUSER = "adduser";
@ -91,6 +92,7 @@ public class BSimControlLaunchable implements GhidraLaunchable {
Set.of(AUTH_OPTION, DN_OPTION, NO_LOCAL_AUTH_OPTION, CAFILE_OPTION);
private static final Set<String> STOP_OPTIONS =
Set.of(FORCE_OPTION);
private static final Set<String> STATUS_OPTIONS = Set.of();
private static final Set<String> RESET_PASSWORD_OPTIONS = Set.of();
private static final Set<String> CHANGE_PRIVILEGE_OPTIONS = Set.of();
private static final Set<String> ADDUSER_OPTIONS =
@ -104,6 +106,7 @@ public class BSimControlLaunchable implements GhidraLaunchable {
static {
ALLOWED_OPTION_MAP.put(COMMAND_START, START_OPTIONS);
ALLOWED_OPTION_MAP.put(COMMAND_STOP, STOP_OPTIONS);
ALLOWED_OPTION_MAP.put(COMMAND_STATUS, STATUS_OPTIONS);
ALLOWED_OPTION_MAP.put(COMMAND_RESET_PASSWORD, RESET_PASSWORD_OPTIONS);
ALLOWED_OPTION_MAP.put(COMMAND_CHANGE_PRIVILEGE, CHANGE_PRIVILEGE_OPTIONS);
ALLOWED_OPTION_MAP.put(COMMAND_ADDUSER, ADDUSER_OPTIONS);
@ -201,6 +204,9 @@ public class BSimControlLaunchable implements GhidraLaunchable {
case COMMAND_STOP:
scanDataDirectory(params, slot++);
break;
case COMMAND_STATUS:
scanDataDirectory(params, slot++);
break;
case COMMAND_ADDUSER:
scanDataDirectory(params, slot++);
scanUsername(params, slot++);
@ -1060,6 +1066,30 @@ public class BSimControlLaunchable implements GhidraLaunchable {
System.out.println("Server shutdown complete");
}
/**
* Retrieve the status of a PostgreSQL server.
* @throws IOException if server status can not be retrieved
* @throws InterruptedException if the status command is interrupted
*/
private void statusCommand() throws IOException, InterruptedException {
discoverPostgresInstall();
List<String> command = new ArrayList<String>();
command.add(postgresControl.getAbsolutePath());
command.add("status");
command.add("-D");
command.add(dataDirectory.getAbsolutePath());
int res = runCommand(null, command, loadLibraryVar, loadLibraryValue);
if (res == 0) {
System.out.println("Server running");
}
else if (res == 3) {
System.out.println("Server down");
}
else {
throw new IOException("Error getting postgres server status");
}
}
/**
* Trigger a server running on the local host to rescan its identity file to pickup
* any changes to the user mapping
@ -1398,6 +1428,9 @@ public class BSimControlLaunchable implements GhidraLaunchable {
case COMMAND_STOP:
stopCommand();
break;
case COMMAND_STATUS:
statusCommand();
break;
case COMMAND_ADDUSER:
addUserCommand();
break;
@ -1433,6 +1466,7 @@ public class BSimControlLaunchable implements GhidraLaunchable {
"USAGE: bsim_ctl [command] required-args... [OPTIONS...}\n\n" +
" start </datadir-path> [--auth|-a pki|password|trust] [--noLocalAuth] [--cafile \"</cacert-path>\"] [--dn \"<distinguished-name>\"]\n" +
" stop </datadir-path> [--force]\n" +
" status </datadir-path>\n" +
" adduser </datadir-path> <username> [--dn \"<distinguished-name>\"]\n" +
" dropuser </datadir-path> <username>\n" +
" changeauth </datadir-path> [--auth|-a pki|password|trust] [--noLocalAuth] [--cafile \"</cacert-path>\"] [--dn \"<distinguished-name>\"]\n" +