Get Samba version or capability information from Windows
[samba.git] / source / lib / version.c
1 /* 
2    Unix SMB/CIFS implementation.
3    Samba Version functions
4    
5    Copyright (C) Stefan Metzmacher      2003
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 #include "includes.h"
22 #include <assert.h>
23
24 const char *samba_version_string(void)
25 {
26 #ifndef SAMBA_VERSION_VENDOR_SUFFIX
27         return SAMBA_VERSION_OFFICIAL_STRING;
28 #else
29         static char *samba_version;
30         int res;
31 #ifdef SAMBA_VERSION_VENDOR_PATCH
32         char *tmp_version;
33 #endif
34
35         if (samba_version != NULL)
36                 return samba_version;
37
38         res = asprintf(&samba_version, "%s-%s",
39                        SAMBA_VERSION_OFFICIAL_STRING,
40                        SAMBA_VERSION_VENDOR_SUFFIX);
41         /*
42          * Can't use smb_panic here due to dependencies
43          */
44         assert(res != -1);
45
46 #ifdef SAMBA_VERSION_VENDOR_PATCH
47         res = asprintf(&tmp_version, "%s-%d", samba_version,
48                        SAMBA_VERSION_VENDOR_PATCH);
49         /*
50          * Can't use smb_panic here due to dependencies
51          */
52         assert(res != -1);
53
54         SAFE_FREE(samba_version);
55
56         samba_version = tmp_version;
57 #endif
58
59         return samba_version;
60 #endif
61 }
62
63 void samba_extended_info_version(struct smb_extended_info *extended_info)
64 {
65         assert(extended_info != NULL);
66
67         extended_info->samba_magic = SAMBA_EXTENDED_INFO_MAGIC;
68         extended_info->samba_version = ((SAMBA_VERSION_MAJOR & 0xff) << 24)
69                                        | ((SAMBA_VERSION_MINOR & 0xff) << 16)
70                                        | ((SAMBA_VERSION_RELEASE & 0xff) << 8);
71 #ifdef SAMBA_VERSION_REVISION
72         extended_info->samba_version |= (tolower(*SAMBA_VERSION_REVISION) - 'a' + 1) & 0xff;
73 #endif
74 #ifdef SAMBA_VERSION_RC_RELEASE
75         extended_info->samba_subversion |= (SAMBA_VERSION_RC_RELEASE & 0xff) << 24;
76 #else
77 #ifdef SAMBA_VERSION_PRE_RELEASE
78         extended_info->samba_subversion |= (SAMBA_VERSION_PRE_RELEASE & 0xff) << 16;
79 #endif
80 #endif
81 #ifdef SAMBA_VERSION_VENDOR_PATCH
82         extended_info->samba_subversion |= (SAMBA_VERSION_VENDOR_PATCH & 0xffff);
83 #endif
84         /* FIXME: samba_gitcommitdate should contain the git commit date. */
85         unix_to_nt_time(&extended_info->samba_gitcommitdate, time(NULL));
86
87         snprintf (extended_info->samba_version_string,
88                   SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH,
89                   "%s", samba_version_string());
90 }