Dmitry Timoshkov : adsldp: Map "1.3.6.1.4.1.1466.115.121.1.24" to ADSTYPE_UTC_TIME.
Alexandre Julliard
julliard at winehq.org
Tue Apr 7 15:27:16 CDT 2020
Module: wine
Branch: master
Commit: c7656ffd186a480a7bf269a8fe3e234366909434
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c7656ffd186a480a7bf269a8fe3e234366909434
Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date: Tue Apr 7 18:14:03 2020 +0800
adsldp: Map "1.3.6.1.4.1.1466.115.121.1.24" to ADSTYPE_UTC_TIME.
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/adsldp/adsldp.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
dlls/adsldp/schema.c | 2 ++
2 files changed, 46 insertions(+)
diff --git a/dlls/adsldp/adsldp.c b/dlls/adsldp/adsldp.c
index f2773262a6..8897545e4f 100644
--- a/dlls/adsldp/adsldp.c
+++ b/dlls/adsldp/adsldp.c
@@ -1528,6 +1528,50 @@ static HRESULT add_column_values(LDAP_namespace *ldap, struct ldap_search_contex
col->hReserved = values;
break;
}
+
+ case ADSTYPE_UTC_TIME:
+ {
+ struct berval **values = ldap_get_values_lenW(ldap->ld, ldap_ctx->entry, name);
+ if (!values)
+ return E_ADS_COLUMN_NOT_SET;
+ count = ldap_count_values_len(values);
+
+ col->pADsValues = heap_alloc_zero(count * sizeof(col->pADsValues[0]));
+ if (!col->pADsValues)
+ {
+ ldap_value_free_len(values);
+ return E_OUTOFMEMORY;
+ }
+
+ for (i = 0; i < count; i++)
+ {
+ col->pADsValues[i].dwType = type;
+ if (values[i]->bv_len < 14 ||
+ _snscanf_l(values[i]->bv_val, values[i]->bv_len, "%04u%02u%02u%02u%02u%02u", NULL,
+ &col->pADsValues[i].u.UTCTime.wYear, &col->pADsValues[i].u.UTCTime.wMonth,
+ &col->pADsValues[i].u.UTCTime.wDay, &col->pADsValues[i].u.UTCTime.wHour,
+ &col->pADsValues[i].u.UTCTime.wMinute, &col->pADsValues[i].u.UTCTime.wSecond) != 6)
+ {
+ FIXME("not recognized UTCTime: %s\n", debugstr_an(values[i]->bv_val, values[i]->bv_len));
+ memset(&col->pADsValues[i].u.UTCTime, 0, sizeof(col->pADsValues[i].u.UTCTime));
+ continue;
+ }
+
+ if ((values[i]->bv_val[14] != '.' && values[i]->bv_val[14] != ',') ||
+ values[i]->bv_val[15] != '0' || values[i]->bv_val[16] != 'Z')
+ FIXME("not handled time zone: %s\n", debugstr_an(values[i]->bv_val + 14, values[i]->bv_len - 14));
+
+ TRACE("%s => %02u.%02u.%04u %02u:%02u:%02u\n", debugstr_an(values[i]->bv_val, values[i]->bv_len),
+ col->pADsValues[i].u.UTCTime.wDay, col->pADsValues[i].u.UTCTime.wMonth,
+ col->pADsValues[i].u.UTCTime.wYear, col->pADsValues[i].u.UTCTime.wHour,
+ col->pADsValues[i].u.UTCTime.wMinute, col->pADsValues[i].u.UTCTime.wSecond);
+ }
+
+ ldap_value_free_len(values);
+ col->hReserved = NULL;
+ break;
+ }
+
}
col->dwADsType = type;
diff --git a/dlls/adsldp/schema.c b/dlls/adsldp/schema.c
index f0ecfc3ac6..6965dc3274 100644
--- a/dlls/adsldp/schema.c
+++ b/dlls/adsldp/schema.c
@@ -93,6 +93,8 @@ ADSTYPEENUM get_schema_type(const WCHAR *name, const struct attribute_type *at,
return ADSTYPE_DN_STRING;
if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.15"))
return ADSTYPE_CASE_IGNORE_STRING;
+ if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.24"))
+ return ADSTYPE_UTC_TIME;
if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.27"))
return ADSTYPE_INTEGER;
if (!wcscmp(type->syntax, L"1.3.6.1.4.1.1466.115.121.1.38"))
More information about the wine-cvs
mailing list