Line data Source code
1 : /* 2 : * Unix SMB/CIFS implementation. 3 : * Virtual Windows Registry Layer 4 : * Copyright (C) Gerald Carter 2002-2005 5 : * Copyright (C) Michael Adam 2008 6 : * 7 : * This program is free software; you can redistribute it and/or modify 8 : * it under the terms of the GNU General Public License as published by 9 : * the Free Software Foundation; either version 3 of the License, or 10 : * (at your option) any later version. 11 : * 12 : * This program is distributed in the hope that it will be useful, 13 : * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 : * GNU General Public License for more details. 16 : * 17 : * You should have received a copy of the GNU General Public License 18 : * along with this program; if not, see <http://www.gnu.org/licenses/>. 19 : */ 20 : 21 : /* 22 : * CurrentVersion registry backend. 23 : * 24 : * This is a virtual overlay, dynamically presenting version information. 25 : */ 26 : 27 : #include "includes.h" 28 : #include "registry.h" 29 : #include "reg_util_internal.h" 30 : #include "reg_objects.h" 31 : 32 : #undef DBGC_CLASS 33 : #define DBGC_CLASS DBGC_REGISTRY 34 : 35 : extern struct registry_ops regdb_ops; 36 : 37 : #define KEY_CURRENT_VERSION_NORM "HKLM\\SOFTWARE\\MICROSOFT\\WINDOWS NT\\CURRENTVERSION" 38 : 39 341 : static int current_version_fetch_values(const char *key, struct regval_ctr *values) 40 : { 41 341 : const char *sysroot_string = "c:\\Windows"; 42 0 : fstring sysversion; 43 341 : char *path = NULL; 44 341 : TALLOC_CTX *ctx = talloc_tos(); 45 : 46 341 : path = talloc_strdup(ctx, key); 47 341 : if (path == NULL) { 48 0 : return -1; 49 : } 50 341 : path = normalize_reg_path(ctx, path); 51 341 : if (path == NULL) { 52 0 : return -1; 53 : } 54 : 55 341 : if (strncmp(path, KEY_CURRENT_VERSION_NORM, strlen(path)) != 0) { 56 0 : return regdb_ops.fetch_values(key, values); 57 : } 58 : 59 341 : regval_ctr_addvalue_sz(values, "SystemRoot", sysroot_string); 60 : 61 341 : fstr_sprintf(sysversion, "%d.%d", SAMBA_MAJOR_NBT_ANNOUNCE_VERSION, 62 : SAMBA_MINOR_NBT_ANNOUNCE_VERSION); 63 : 64 341 : regval_ctr_addvalue_sz(values, "CurrentVersion", sysversion); 65 : 66 341 : return regval_ctr_numvals(values); 67 : } 68 : 69 81097 : static int current_version_fetch_subkeys(const char *key, 70 : struct regsubkey_ctr *subkey_ctr) 71 : { 72 81097 : return regdb_ops.fetch_subkeys(key, subkey_ctr); 73 : } 74 : 75 : struct registry_ops current_version_reg_ops = { 76 : .fetch_values = current_version_fetch_values, 77 : .fetch_subkeys = current_version_fetch_subkeys, 78 : };