mirror of
https://github.com/samba-team/samba.git
synced 2025-02-05 21:57:51 +03:00
Get Samba version or capability information from Windows
On Jan 21 16:18, Danilo Almeida wrote: > Corina wrote: > > > + time_t samba_gitcommitdate; > > And: > > > + SIVAL(pdata,28,extended_info.samba_gitcommitdate); > > + memcpy(pdata+32,extended_info.samba_version_string,32); > > Note that you are dropping bits on a system w/64-bit time_t, and that this has the 2038 problem. Right. I changed samba_gitcommitdate from time_t to NTTIME and shortened samba_version_string to 28 bytes. New patch below. Thanks, Corinna
This commit is contained in:
parent
e9bb3d5067
commit
28aa1c199d
@ -1936,4 +1936,16 @@ enum usershare_err {
|
||||
/* Different reasons for closing a file. */
|
||||
enum file_close_type {NORMAL_CLOSE=0,SHUTDOWN_CLOSE,ERROR_CLOSE};
|
||||
|
||||
/* Used in SMB_FS_OBJECTID_INFORMATION requests. Must be exactly 48 bytes. */
|
||||
#define SAMBA_EXTENDED_INFO_MAGIC 0x536d4261 /* "SmBa" */
|
||||
#define SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH 28
|
||||
struct smb_extended_info {
|
||||
uint32 samba_magic; /* Always SAMBA_EXTRA_INFO_MAGIC */
|
||||
uint32 samba_version; /* Major/Minor/Release/Revision */
|
||||
uint32 samba_subversion; /* Prerelease/RC/Vendor patch */
|
||||
NTTIME samba_gitcommitdate;
|
||||
char samba_version_string[SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH];
|
||||
};
|
||||
extern void samba_extended_info_version(struct smb_extended_info *);
|
||||
|
||||
#endif /* _SMB_H */
|
||||
|
@ -59,3 +59,32 @@ const char *samba_version_string(void)
|
||||
return samba_version;
|
||||
#endif
|
||||
}
|
||||
|
||||
void samba_extended_info_version(struct smb_extended_info *extended_info)
|
||||
{
|
||||
assert(extended_info != NULL);
|
||||
|
||||
extended_info->samba_magic = SAMBA_EXTENDED_INFO_MAGIC;
|
||||
extended_info->samba_version = ((SAMBA_VERSION_MAJOR & 0xff) << 24)
|
||||
| ((SAMBA_VERSION_MINOR & 0xff) << 16)
|
||||
| ((SAMBA_VERSION_RELEASE & 0xff) << 8);
|
||||
#ifdef SAMBA_VERSION_REVISION
|
||||
extended_info->samba_version |= (tolower(*SAMBA_VERSION_REVISION) - 'a' + 1) & 0xff;
|
||||
#endif
|
||||
#ifdef SAMBA_VERSION_RC_RELEASE
|
||||
extended_info->samba_subversion |= (SAMBA_VERSION_RC_RELEASE & 0xff) << 24;
|
||||
#else
|
||||
#ifdef SAMBA_VERSION_PRE_RELEASE
|
||||
extended_info->samba_subversion |= (SAMBA_VERSION_PRE_RELEASE & 0xff) << 16;
|
||||
#endif
|
||||
#endif
|
||||
#ifdef SAMBA_VERSION_VENDOR_PATCH
|
||||
extended_info->samba_subversion |= (SAMBA_VERSION_VENDOR_PATCH & 0xffff);
|
||||
#endif
|
||||
/* FIXME: samba_gitcommitdate should contain the git commit date. */
|
||||
unix_to_nt_time(&extended_info->samba_gitcommitdate, time(NULL));
|
||||
|
||||
snprintf (extended_info->samba_version_string,
|
||||
SAMBA_EXTENDED_INFO_VERSION_STRING_LENGTH,
|
||||
"%s", samba_version_string());
|
||||
}
|
||||
|
@ -2797,7 +2797,14 @@ cBytesSector=%u, cUnitTotal=%u, cUnitAvail=%d\n", (unsigned int)bsize, (unsigned
|
||||
case SMB_FS_OBJECTID_INFORMATION:
|
||||
{
|
||||
unsigned char objid[16];
|
||||
struct smb_extended_info extended_info;
|
||||
memcpy(pdata,create_volume_objectid(conn, objid),16);
|
||||
samba_extended_info_version (&extended_info);
|
||||
SIVAL(pdata,16,extended_info.samba_magic);
|
||||
SIVAL(pdata,20,extended_info.samba_version);
|
||||
SIVAL(pdata,24,extended_info.samba_subversion);
|
||||
SBIG_UINT(pdata,28,extended_info.samba_gitcommitdate);
|
||||
memcpy(pdata+36,extended_info.samba_version_string,28);
|
||||
data_len = 64;
|
||||
break;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user